其他分享
首页 > 其他分享> > P368【基础】均分纸牌 题解

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