第十四天打卡
1.问题:10个小孩围城一圈分糖果,老师分给第1个小孩10块,第2给小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8给小孩6块,第9给小孩14块,第10个小孩20块,然后所有的小孩同时将手中的趟分一半给右边的小孩:糖块数为基数的人课向老师要一块。问金国这样几次后大家手中的糖块数一样多吗?每人个有多少块糖?
2.思路:
问题对象:有十个小孩,每人的糖数不同,那么我们完全可以用数组去将这十个值储存起来
如何操作:将自己手中的一半的糖分给右边,糖块数为奇数的人可向老师要一块,显然我们可以遍历数组将自身的糖减去一半(或者除一半),用另一个的数组保存下来,让这新的数组相邻相加所获得的值更新原来的数组就完成了。
什么时候停止交换:当所有人都相同时候,可以写一个判断数组的方法
最后:将每次变化后的数组输出出来
3.程序流程图:
4.代码实现:
#include<stdio.h>
int j = 0;
int judge(int a[])
{
for (int i = 1; i < 10; i++)
{
if (a[0]!=a[i])
{
return 1;
}
}
return 0;
}
void put(int a[])
{
printf("第 %d 次 ", ++j);
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
int a[10] = {10,2,8,22,16,4,10,6,14,20};
int sweet[10];
while (judge(a))
{
put(a);
for (int i = 0; i < 10; i++)
{
if (a[i] % 2 == 0)
sweet[i] = a[i] / 2;
else
sweet[i] = (a[i] + 1) / 2;
}
for (int i = 0; i < 10; i++)
a[(i+1)%10] = sweet[(i + 1) % 10] + sweet[i];
}
getchar();
return 0;
}