解题思路:
每一次操作时都要对糖果数进行对比是否个数相同,此处使用遍历的方法。其次就是分糖果时,是同时将糖果拿出去一部分,再收回一部分。然后老师再为奇数个糖的小朋友补糖。
注意事项:
参考代码:
//1431: 分糖果 //注意:分糖果这个事件是同时进行 #include <stdio.h> int num[100]; int i, j, sum=0, equl=1; int judgeEqul(int nn) { // 使用遍历对数组的元素进行对比 equl = 1; for(i=0; i<nn-1; i++) { if(equl == 0) break; for(j=i+1; j<nn; j++) { if(num[i] != num[j]) { equl = 0; break; } } } return equl; } int main() { int res=0, n, p, q, cand[100]; int count = 5; // 模拟分糖果的过程,计算最后总糖果的个数,减去最开始糖果的个数就是结果。 scanf("%d", &n); for(p=0; p<n; p++) { scanf("%d", &num[p]); sum += num[p]; } res = judgeEqul(n); // 判断糖果数是否相等 while( res == 0 ) { // 因为分糖果是同时进行,获得新糖果也是同时进行,所以应该把二者区分开。 // 使用新的数组cand[]来存放分出去的糖果数。 for(p=0; p<n; p++) { cand[p] = num[p]/2; num[p] -= num[p]/2; } for(p=0; p<n; p++) { if(p==n-1) num[p] += cand[0]; else num[p] += cand[p+1]; } // 老师为奇数个糖的小朋友补一颗糖 for(p=0; p<n; p++) { if(num[p]%2 == 1) num[p] ++; } res = judgeEqul(n); } sum = num[0] * n - sum; printf("%d\n", sum); }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:674 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:551 |
C语言程序设计教程(第三版)课后习题6.3 (Java代码)浏览:695 |
简单的a+b (C语言代码)浏览:594 |
矩形面积交 (Java代码)浏览:1281 |
C语言训练-自由落体问题 (C语言代码)浏览:1775 |
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2812 |
矩阵乘法 (C++代码)浏览:1662 |
众数问题 (C语言代码)浏览:911 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:672 |