第五題:n 只奶牛坐在一排,每個奶牛擁有 ai 個蘋果,現在你要在它們之間轉移蘋果,使得最后所有奶牛擁有的蘋果數都相同,每一次,你只能從一只奶牛身上拿走恰好兩個蘋果到另一個奶牛上,問最少需要移動多少次可以平分蘋果,如果方案不存在輸出 -1
輸出描述:
輸出一行表示最少需要移動多少次可以平分蘋果,如果方案不存在則輸出 -1。
輸入例子:
4 7 15 9 5
輸出例子:
3
#include<iostream> #include<algorithm> using namespace std; int a[100]; int main() { int n; while(scanf("%d",&n)>0) { int sum=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum=sum+a[i]; } int flag=0; if(sum%n!=0)//如果總數不能被平分,那么怎么挪也是失敗 flag=1; int avg=sum/n,cnt=0; for(int i=1;i<=n;i++) { if(abs(a[i]-avg)%2!=0)//如果有的不能通過每次挪兩個達到平均值那么就會失敗 flag=1; cnt+=abs(a[i]-avg)/2; } if(flag) cout<<-1<<endl; else cout<<cnt/2<<endl;//每次挪動解決兩個奶牛的問題,所以要除2 } }