2017校招真题 网易 分苹果 超、凢脫俗 2022-05-24 06:07 184阅读 0赞 ## 题目描述 ## n 只奶牛坐在一排,每个奶牛拥有 a i 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 ## 输入描述: ## 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。 ## 输出描述: ## 输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。 示例1 ## 输入 ## 4 7 15 9 5 ## 输出 ## 3 水题~ 要注意平均数有小数的话直接-1。 #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<string> #include<algorithm> #include<map> #include<set> #include<queue> #include<vector> using namespace std; #define inf 0x3f3f3f3f int main() { int n,m,i,j,a[105],b[105],sum=0,avg,s=0,k=0; double avgg; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); sum+=a[i]; } avgg=1.0*sum/n; avg=sum/n; if(avg!=avgg) k=1; //printf("%d\n",avg); if(k==0) { memset(b,0,sizeof b); for(i=1;i<=n;i++) { b[i]=a[i]-avg; if(b[i]==0)continue; if(abs(b[i])%2==1) { k=1; break; } else if(b[i]>0) s+=b[i]/2; } } if(k==0) printf("%d\n",s); else printf("-1\n"); }
还没有评论,来说两句吧...