牛客练习

550 阅读1分钟

1. 小美的外卖订单编号

题目链接

题目详情

美团商家的订单发起时,订单编号最开始从 1 开始,后续每发起一个订单,订单编号便在上一订单编号的基础上 +1。为了防止订单号过大,商家还可以设置一个编号上限m,当订单编号超过m时,将又从 1 开始编号。小美想知道,当订单编号上限为m时,第x个订单编号是多少?将有q次询问。

输入

第一行输入一个整数q(1q50000)q(1 \leq q \leq 50000)。 接下来q行,每行两个整数m,x(1m,x109)m,x(1 \leq m,x \leq 10^9)

输出

q行,每行一个整数表示答案。

解题思路

这题很简单,其实就是做取余数操作。当x%m为0时,输出m即可,如:8%2 = 0,编号为4,输,4,如果x%m不为0,则输出余数即可,如,7%2=1,那么就输出1。

AC代码

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long
#define endl '\n'
const int N = 25;
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int k;
    cin >> k;
    while (k--)
    {
        int x, m;
        cin >> m >> x;
        if(x%m==0)
        {
            cout<<m<<endl;
        }
        else
        {
            cout<<x%m<<endl;    
        }
    }
    return 0;
}

2. 小美的加法

题目链接

题目详情

小美有一个长度为n的数组,她想将这个数组进行求和,即sum=a1+a2+...+ansum = a_1+a_2+...+a_n。小美可以使用一次魔法(也可以不使用),将其中一个加号变成乘号,使得sum最大。求出最大的sum。

输入

第一行输入一个整数n。
第二行输入n个整数表示数组a。
1n1051ai1091 \leq n \leq 10^51 \leq a_i \leq 10^9

输出

输出一个整数表示答案。

解题思路

这道题算是道思维题,其实并不难,只需要我们分析一下sum和最大sum的构成即可。最开始,sum就是a1加到an,然后我们要改变一个加号将其变为乘号,使得最后的sum值最大,这里我们首先会想到让相乘的这两个数的积最大,这一步我们可以用循环来找到 * 的位置;其次,最大的msum就等于原总和sum减去相乘的两个数a1,a2,再加上它们的积c,即为最终结果。

AC代码

#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
#define endl '\n'
const int N = 100010;
int a[N];
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,sum=0;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i],sum+=a[i];
    int a1=0,a2=0,c=0;
    for(int j=0;j<n-1;j++)
    {
        if(a[j]*a[j+1]>c)
        {
            a1=a[j],a2=a[j+1];
            c=a[j]*a[j+1];
        }
    }
    cout<<sum+c-a1-a2;
    return 0;
}