一、Review
12【c语言&趣味算法】存钱问题(四层for循环,if判断)
11【C语言&趣味算法】个人所得税问题(结构体应用)︰结构体的声明、定义结构体类型的三种方法等
10(可回看)【C语言&趣味算法】数制转换(常见,二进制、八进制、十进制、十六进制之间任意转换)
09【C语言&趣味算法】再识:折半查找(二分查找)︰基本思想、程序流程图及完整代码、附:顺序查找
08【C语言&趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
07【C语言&趣味算法】最佳存款方案(采用从后往前递推解决)
06【c语言&趣味算法】牛顿迭代法求方程根(可回看)
05【C语言&趣味算法】经典:兔子产子问题(即:Fibonacci数列)
04【C语言&趣味算法】“抓交通肇事犯"问题。算法改进:设置"标识变量”,有效减少循环次数。03【C语言&趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
二、New problem: Sharing sweets(分糖果)
2.1 Description of the problem
2.2Analysis of the problem
2.3 Algorithm design
2.4 Defining the framework of the process(确定程序框架)
2.5 Full code and output
//code by xiexu //趣味13:分糖果 问题 #include<stdio.h> void print(int s[]); int judge(int c[]); int j=0; int main() { int sweet[10]={10,2,8,22,16,4,10,6,14,20}; /*初始化数组数据*/ int i,t[10],l; printf("child 1 2 3 4 5 6 7 8 9 10\n"); printf("………………………………………………………………\n"); printf("time\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"); }
The outpot:
可以知道,经过17次分糖后,每个小朋友手中都会有18块糖果~
2.6 Question expansion(问题拓展)。值得学习!~