1.问题描述:
幼儿园有n(<20)个孩子围成一圈分糖果,老师先随机地发给每个孩子若干颗糖果,然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友;如共有8个孩子,则第1个将原来的一半分给第2个,第2个将原有的一半分给第3个……第8个将原来的一半分给第1个,这样的平分动作同时进行;若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果变成偶数。小孩人数和每个小孩的初始数由键盘输入。经过多少次调整,使每个孩子手中的糖果一样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。
2.解决方案:
应用数组通过判断数组元素是否相等来表示小孩手中的糖果是否相等。利用循环结构,当小孩手中的糖果不等时应进行调整循环,在调整循环过程中,需要处理三个问题:第一是当小孩手中的糖果是奇数时,应使其成为偶数并统计新增发的糖果数;第二是将小孩手中糖果数的一半加给下一个小孩;第三是将每个小孩的一半糖果仍保留在自己手中。
四、主要技术问题的描述
依据三的描述,可以构造一个函数int allequall(int a[],int n)判断各小孩手中的糖果是否相等。
--------------------next---------------------
#include
int allequall(int child[],int n)
{
for(int i=0;iif(child[i]!=child[i+1])
return 1;
else
return 0;
}
const int MaxNum=20;
void main()
{
cout<<"Pelase input the number of the children:";
int Num;
cin>>Num;
int *child;
int *child1;
int Tnum=0;
child=new int [Num];
child1=new int [Num];
for(int i=0;i {
cout<<"Input NO."< cin>>child[i];
}
while(allequall(child,Num))
{
for(int d=0;d {
if(child[d]%2!=0)
{
child[d]++;
Tnum++;
}
}
for(int c=0;c child1[c]=child[c];
for(int r=0;r child1[r]/=2;
for(int a=0;a {
child[a]/=2;
child[a]+=child1[a+1];
}
child[Num-1]/=2;
child[Num-1]+=child1[0];
}
cout<<"每个同学最后分到糖果数目是:"< <<"老师分发出的糖果数是:"<}
--------------------next---------------------
#include
bool allequall(int child[],int n)//判断各小孩手中的糖果是否相等
{
for(int i=0;iif(child[i]!=child[i+1])
return false;//不相等返回假
return true;//相等返回真
}
const int MaxNum=20;//定义最大人数
//主函数
void main()
{
loop:
cout<<"Pelase input the number of the children:";
int Num;
cin>>Num;//输入人数
if(Num>MaxNum)
{
cout<<"Error Number!!"< goto loop;
}
int *child;
int *child1;
//构造两个相应大小的数组child代表小朋友现有的糖果数child1代表小朋友原来有的糖果数
int Tnum=0;
child=new int [Num];
child1=new int [Num];
for(int i=0;i{
cout<<"Input NO."<cin>>child[i];
}
while(!allequall(child,Num))//当糖果数不相等时循环
{
for(int d=0;d{
if(child[d]%2!=0)
{
child[d]++;
Tnum++;
}
}//把糖果数为奇数小朋友的糖果数+1
for(int c=0;cchild1[c]=child[c];//将child1赋值用来记忆原来小朋友的糖果数
for(int r=0;rchild1[r]/=2;//求出原来每个小朋友糖果数的一半
for(int a=0;a{
child[a]/=2;
child[a]+=child1[a+1];
}
child[Num-1]/=2;
child[Num-1]+=child1[0];//把最后一个小朋友糖果数的一半加第一个小朋友的糖果数
}
cout<<"每个同学最后分到糖果数目是:"<<<"老师分发出的糖果数是:"<}
--------------------next---------------------
阅读(1687) | 评论(0) | 转发(0) |