SH17. 分玩具
描述
幼儿园里有有M个小朋友在课件玩耍,每个人手中现有ni个玩具。为了公平起见,老师需要让每个小朋友手中有相同数量的玩具。假设老师每次只能从一个人手中拿走两个玩具并给另一个小朋友。求老师最少需要做多少次这样的玩具转移。如果不存在可行的方案则输出-1。输入描述
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数M(1 <= M<= 100),接下来的一行包含M个整数ni(1 <= ni <= 100)。输出描述
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。示例1
输入:
4 7 15 9 5
输出:
3
示例2
输入:
2 3 6
输出:
-1
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-07
#include <stdio.h> #include <stdlib.h> int main(void) { int m,i,sum=0,tmp,ave,nums=0; scanf("%d",&m); int a[m]; for(i=0;i<m;i++) { scanf("%d",&a[i]); sum+=a[i]; } if(sum%m!=0) { printf("-1"); return 0; } ave=sum/m; for(i=0;i<m;i++) { tmp=abs(ave-a[i]); if(tmp==0) continue; if(tmp%2!=0) { printf("-1"); return 0; } if(a[i]>ave) { nums+=tmp/2; } } printf("%d",nums); }
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-05-03
#include <stdio.h> int main(){ int M,sum = 0,avg,count = -1,more = 0; scanf("%d", &M); int N[M]; for(int i = 0;i<M;i++){ scanf("%d", &N[i]); sum += N[i]; } if(sum%M != 0){ printf("%d" , count); return 0; } else{ avg = sum/M; for(int i = 0;i<M;i++){ if(N[i]>avg){ more += N[i]-avg; } } } if(more%2 == 0) count = more/2; printf("%d" , count); return 0; }