P368【基礎】均分紙牌 題解
阿新 • • 發佈:2021-11-30
題意
有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; }