C++分糖问题;填空**********①***********

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:27:46
n个孩子(n<20),老师随机发给每个孩子若干糖果;每个孩子讲手中的糖分一半给他右边的孩子;如果是奇数,就向老师要一颗;孩子数和糖果数键盘输入;经过多次调整,知道糖果数一样多。结束时,每个人有多少糖,老师又增发了多少;

#include<iostream.h>
#define N 20
int allEqual(int[],int n)
{ int i; for(i=1;i<n;i++)
if(a[0]!=a[i]) return 0;
return1; }

int[N],b[N];
void main(){
int i,n,add=0,lop=0;
cout<<"输入小孩人数n(<20):";
cin>n;
cout<<"输入每个小孩开始的糖数:";
for(i=0;i<n;i++)
{ cout<<"第"<<i+1<<"个小孩: ";
cin>>a[i];
}

while(*******①********)//填空
{ lop++;
for(i=0;i<n;i++)
{
if(a[i]%2) { a[i]++; ***********②******* ;}//填空

if(i<n-1) b[i+1]=a[i]/2;
else ***********③***********;//填空
a[i]/=2;
}
for(i=0;i<n;i++) ***********④**************;//填空
}
cout<<"共调整"<<lop<<"次\n";
cout<<"调整过程中新增发"<<

1、填空如下:
①allEqual(a, n) == 0
②add++
③b[0]=a[i]/2
④a[i]+=b[i]
2、程序尚有多处问题,不能通过编译:
(1)指令
int[N],b[N];
修改为为
int a[N],b[N];
并移到指令
#define N 20
后面一行。
(2)指令
return1;
修改为
return 1;
(3)指令
cin>n;
修改为
cin>>n;
(4)②和③后面的全角分号修改为半角分号

1. !allEqual(a,n)
2. add++
3. b[i]=a[i]
4. a[i]+=b[i]

1)!allEqual(a, n) //如果没有分均匀,就再循环分一次,直到均匀后退出
2)add++ //由于分到手的糖果是奇数,孩子问老师要了一颗,所以老师多发了一颗糖要计数
3)b[0] = a[i]/2 //a[i]表示最后一个孩子准备分糖给他右手边的孩子,由于他右手边的孩子是第一个孩子,序数是"0",因此是给b[0]分配要发的糖的数量
4)a[i] = a[i] + b[i] //每一个孩子手中的糖从原来他已有的糖(a[i])加上他左手边孩子分给他的糖(b[i]),代码可简写为:a[i] += b[i]