分糖问题:
问题描述:某位老师给小孩子们分糖,10个小孩围在一圈,分糖数量如下:10,2,8,22,16,4,10,6,14,20。每个小孩同时将手中糖果的一半分给右边的小孩,分完后糖果为奇数的小孩可以向老师要一个糖果,问几次后每个小孩的糖果相等
问题分析:先通过数学方法进行分析,十个小孩同时给一半的糖果给完后的数量为:15,6,5,15,19,10,11,8,10,17明显数学方法十分困难,而同时的动作,符合循环结构,所以,我们要写出选择奇偶数的程序
伪代码:
输入一个数组a[10,2,8,22,16,4,10,6,14,20]
for(i=1;1<=10;i++)
是偶数分一半,是奇数+1再分一半
分一半给右边的孩子,输出有多少糖果,完成一轮循环
在这之后定义一个函数用来判断每个孩子的糖果数是否相等
不相等继续循环相等退出循环输出结果
代码: #include<stdio.h>
void print(int s[]);
int judge(int c[]);
int j=0;
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("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
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;
return 0;
}
void print (int s[])
{
int k;
printf("%2d",j++);
for(k=0;k<10;k++)
printf("%4d",s[k]);
printf("\n");
}
标签:10,int,sweet,每日,printf,print,打卡,糖果 From: https://www.cnblogs.com/4a5r/p/17347649.html