P368【基础】均分纸牌 题解
作者:互联网
题意
有n堆纸牌(2≤n≤200),排成一行,编号分别为1,2,…n。 已知每堆纸牌有一定的张数,且张数之和均为n的倍数。移动各堆中的任意张纸牌,使每堆的数量达到相同,且移动次数最少。 移动规则: 每次可以移动任意的张数,第1堆可以移向第2堆,第2堆可以移向第1堆或第3堆,... 第n 堆只可以移向第n -1堆。
输入格式
第一行一个整数n。
第二行n个整数,用空格分隔。
输出格式
一个整数(表示最少移动次数)。
样例输入
4
3 5 4 8
样例输出
3
题解
四堆纸牌,第一堆只能挪到第二堆,那么接下来,任何事情就与第一堆没关系了,因为它的数量已经满足了!那么就可以把第一堆“删掉”,第二堆就变成了第一堆!接下来上述再循环一遍…也就是说,所有的牌只可能向右边挪!
STEP:
1.求出平均数
2.算出当前的数与平均数差多少
3.挪到右边
4.完美结束
代码
#include <bits/stdc++.h>
using namespace std;
int a[205];
int main()
{
int n, sum = 0, ans = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
sum += a[i];
}
int avg = sum / n;
for(int i = 1; i <= n; i++)
{
if(avg == a[i]) continue;
a[i + 1] += a[i] -avg;
ans++;
}
cout << ans;
return 0;
}
标签:P368,移向,纸牌,int,题解,sum,张数,移动 来源: https://www.cnblogs.com/codetty/p/15623777.html