打卡4

问题描述:10个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个2块,8块,22块,1641061420。然后所有小孩同时将手中的糖分一半给右边小孩;糖数为奇数的可向老师要一块。问经过多少次大家糖一样多?每个人多少糖。

流程图:

 

 

伪代码:

clswe[10]={10,2,8,22,16,4,10,6,14,20}   //糖

while 糖数不相同

for i<-0 to 10

if(clswe[i]为偶)

clswe[i]=clswe[i]/2

t[i]=clswe[i]/2

else

clswe[i]=(clswe[i]+1)/2

t[i]=(clswe[i]+1)/2 分开//

for j<-0 to 10

if j==9

clswe[0]+=t[9]

else

clswe[j+1]+=t[j] //给糖

s++ //次数

output s,clswe[0]

代码:

#include <iostream>

using namespace std;

int issame(int a[]);

int main()

{

int clswe[10]={10,2,8,22,16,4,10,6,14,20};

int i,t[10],j,s=0;

while(issame(clswe)==0)

{

for(i=0;i<10;i++)

{

if(clswe[i]%2==0)

{

t[i]=clswe[i]/2;

clswe[i]=clswe[i]/2;

}

else

{

t[i]=(clswe[i]+1)/2;

clswe[i]=(clswe[i]+1)/2;

}

}

for(j=0;j<10;j++)

{

if(j==9)

clswe[0]+=t[9];

else

clswe[j+1]+=t[j];

}

s++;

}

cout<<s<<""<<endl<<clswe[0]<<""<<endl;

}

int issame(int a[])

{

int i;

for(i=0;i<10;i++)

{

if(a[0]!=a[i])

return 0;

}

return 1;

}

 

posted @ 2023-05-11 20:41  umiQa  阅读(16)  评论(0编辑  收藏  举报