【输入】
第一行包含整数N
第二行包含N个整数A1.A2.A3……AN表示各牌堆数量
【输出】
输出使得所有牌堆的纸牌数量都相等所需的最少移动次数。
【例如】
4
9 8 17 6
【输出】
3
【解题思路】
本题限制了条件,纸牌总数必为纸牌堆数N的倍数,所以每一堆的纸牌最终数量可以直接求出,向后遍历时,每遍历一个就会将该堆的纸牌数量补齐,然后再对补齐所需的卡牌数(可负)从后一堆中取得即可。
#include<iostream>
using namespace std;
const int N = 110;
int num[N];
int main()
{
int n, total = 0, res = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> num[i];
total += num[i];
}
int avg = total / n;
for (int i = 1; i <= n; i++)
{
if (num[i] != avg)
{
num[i+1] += num[i] - avg;
res++;
}
}
cout << res << endl;
return 0;
}