一、问题描述
二、分析
循环体是:所有的小孩分一半的糖给右面的人,糖数块为奇数的人找老师要一块。
有十个小孩,定义一个长度为10 的整数型数组,糖果每次经过一次分配就打印一次,直到最后一次打印时,10个小孩所拥有的糖果数都相同,结束循环。
1)定义初始条件
int sweet[10]={10,2,8,22,16,4,10,6,14,20};
2)循环框架
while(是个孩子的糖果数不同)
{
/*将每个孩子手中的糖果分成一半*/
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; /*若为奇数则加1再分出一半*/
/*将分出一半的糖给右边的孩子*/
for(l=0;l<9;l++)
sweet[l+1]=sweet[l+1]+t[l];
sweet[0]+=t[9];
cout<<sweet; /*输出当前每个孩子的糖果数*/
}
3)定义judge()函数。(判断每个孩子手中的元素是否相同)
int judge(int c[ ])
{
int i;
for(i=0;i<10;i++)
if(c[0]!=c[i])
return 1; /*不相同返回1*/
else
return 0; /*相同返回0*/
}
三、代码
#include<iostream>
using namespace std;
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;
cout<<" child"<<endl;
cout<<" round 1 2 3 4 5 6 7 8 9 10"<<endl;
cout<<"………………………"<<endl;
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;
cout<<" "<<j++;
for(k=0;k<10;k++)
cout<<s[k];
cout<<endl;
}
四、结果
标签:一半,10,5.4,int,sweet,judge,2.3,return From: https://www.cnblogs.com/yindantong/p/17360377.html