题目翻译:
有 $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,当心踩坑。