1. 程式人生 > 其它 >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;
}