题目翻译:

有 $n$ 个数,每个数为 $a_i$ ,你可以每次选 $2$ 个数 $a$ 和 $b$ ,把 $a$ 高度 $-1$ ,把 $b$ 高度 $+1$。在经历无限次操作后,求 $max(a)-min(a)$ 的值。

题目思路:

其实就是求平均数,如果求出的和是 $n$ 的倍数,那么意味数组 $a$ 中的每个值相等且均为正整数,那么相差都为 $0$。反之不是 $n$ 的倍数,那么总会有数多出 $1$ ,那么最大与最小的差就为 $1$ 。这个想法非常好证明,取模之后的数比 $n$ 要小,那么每个数添上 $1$ 总会有没添上的,那么差就是为 $1$。

题目代码:

void solve()
{
    int n,sum=0; 
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;//输入 
        sum+=x;//求和 
    }
    cout<<(sum%n==0?0:1)<<endl;//判断 输出 
}

或者不会三步运算符可用 $if ... else...$ 代替

void solve()
{
    int n,sum=0; 
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;//输入 
        sum+=x;//求和 
    }
    if(sum%n==0)//如果是第一种情况 
    {
        cout<<0<<endl;
    } 
    else//如果是第二种情况
    {
        cout<<1<<endl;
    }
}

多组数据,代码未全。请勿copy,当心踩坑。

最后修改:2023 年 04 月 22 日
v我50吃疯狂星期四