75.10個小孩分糖果
十個小孩圍成一圈分糖果,老師分給第一個小孩10塊,第二個小孩2塊,第三個小孩8塊,第四個小孩22塊,第五個小孩16塊,第六個小孩4塊,第七個小孩10塊,第八個小孩6塊,第九個小孩14塊,第十個小孩20塊。然后所有的小孩同時將手中的糖分一半給右邊的小孩;糖塊數(shù)為奇數(shù)的人可向老師要一塊。問經(jīng)過這樣幾次后大家手中的糖的塊數(shù)一樣多?每人各有多少塊糖?
*問題分析與算法設(shè)計
題目描述的分糖過程是一個機械的重復(fù)過程,編程算法完全可以按照描述的過程進行模擬。
*程序與程序注釋
#include
void print(int s[]);
int judge(int c[]);
int j=0;
void main()
{
static int sweet[10]={10,2,8,22,16,4,10,6,14,20}; /*初始化數(shù)組數(shù)據(jù)*/
int i,t[10],l;
printf(" child\n");
printf(" round 1 2 3 4 5 6 7 8 9 10\n");
printf(".............................\n");
print(sweet); /*輸出每個人手中糖的塊數(shù)*/
while(judge(sweet)) /*若不滿足要求則繼續(xù)進行循環(huán)*/
{
for(i=0;i<10;i++) /*將每個人手中的糖分成一半*/
if(sweet[i]%2==0) /*若為偶數(shù)則直接分出一半*/
t[i]=sweet[i]=sweet[i]/2;
else /*若為奇數(shù)則加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); /*輸出當(dāng)前每個孩子中手中的糖數(shù)*/
}
}
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[]) /*輸出數(shù)組中每個元素的值*/
{
int k;
printf(" %2d ",j++);
for(k=0;k<10;k++) printf("%4d",s[k]);
printf("\n");
}
十個小孩圍成一圈分糖果,老師分給第一個小孩10塊,第二個小孩2塊,第三個小孩8塊,第四個小孩22塊,第五個小孩16塊,第六個小孩4塊,第七個小孩10塊,第八個小孩6塊,第九個小孩14塊,第十個小孩20塊。然后所有的小孩同時將手中的糖分一半給右邊的小孩;糖塊數(shù)為奇數(shù)的人可向老師要一塊。問經(jīng)過這樣幾次后大家手中的糖的塊數(shù)一樣多?每人各有多少塊糖?
*問題分析與算法設(shè)計
題目描述的分糖過程是一個機械的重復(fù)過程,編程算法完全可以按照描述的過程進行模擬。
*程序與程序注釋
#include
void print(int s[]);
int judge(int c[]);
int j=0;
void main()
{
static int sweet[10]={10,2,8,22,16,4,10,6,14,20}; /*初始化數(shù)組數(shù)據(jù)*/
int i,t[10],l;
printf(" child\n");
printf(" round 1 2 3 4 5 6 7 8 9 10\n");
printf(".............................\n");
print(sweet); /*輸出每個人手中糖的塊數(shù)*/
while(judge(sweet)) /*若不滿足要求則繼續(xù)進行循環(huán)*/
{
for(i=0;i<10;i++) /*將每個人手中的糖分成一半*/
if(sweet[i]%2==0) /*若為偶數(shù)則直接分出一半*/
t[i]=sweet[i]=sweet[i]/2;
else /*若為奇數(shù)則加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); /*輸出當(dāng)前每個孩子中手中的糖數(shù)*/
}
}
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[]) /*輸出數(shù)組中每個元素的值*/
{
int k;
printf(" %2d ",j++);
for(k=0;k<10;k++) printf("%4d",s[k]);
printf("\n");
}