以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 10个小孩分糖果 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=88048) |
-- 作者:葛靖青001 -- 发布时间:11/30/2010 8:57:00 AM -- 10个小孩分糖果 【转自互联网】 十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖? *问题分析与算法设计 题目描述的分糖过程是一个机械的重复过程,编程算法完全可以按照描述的过程进行模拟。 *程序说明与注释 #include<stdio.h> void print(int s[]); int judge(int c[]); int j=0; int main() { static int sweet[10]={10,2,8,22,16,4,10,6,14,20}; /*初始化数组数据*/ int i,t[10],l; printf(" child\n"); printf(" round 1 2 3 4 5 6 7 8 9 10\n"); printf(".............................\n"); print(sweet); /*输出每个人手中糖的块数*/ while(judge(sweet)) /*若不满足要求则继续进行循环*/ { for(i=0;i<10;i++) /*将每个人手中的糖分成一半*/ if(sweet[i]%2==0) /*若为偶数则直接分出一半*/ t[i]=sweet[i]=sweet[i]/2; else /*若为奇数则加1后再分出一半*/ t[i]=sweet[i]=(sweet[i]+1)/2; for(l=0;l<9;l++) /*将分出的一半糖给右(后)边的孩子*/ sweet[l+1]=sweet[l+1]+t[l]; sweet[0]+=t[9]; print(sweet); /*输出当前每个孩子中手中的糖数*/ } } int judge(int c[]) { int i; for(i=0;i<10;i++) /*判断每个孩子手中的糖是否相同*/ if(c[0]!=c[i]) return 1; /*不相同返回 1*/ return 0; } void print(int s[]) /*输出数组中每个元素的值*/ { int k; printf(" %2d ",j++); for(k=0;k<10;k++) printf("%4d",s[k]); printf("\n"); } |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
11,515.630ms |