功能:十個小孩圍成一圈分糖果,老師分給第一個小孩 10 塊,
第二個小孩 2 塊,第三個小孩 8 塊,第四個小孩 22 塊,第五個
小孩16 塊,第六個小孩 4塊,第七個小孩 10 塊,第八個小孩6
塊,第九個小孩 14 塊,第十個小孩20 塊。然后所有的小孩同時
將自己手中的糖分一半給左邊的小孩;糖塊數為奇數的人可向老師
要一塊。問經過這樣幾次調整后大家手中的糖的塊數都一樣?每人
各有多少塊糖?
*/
#include <stdio.h>
void main()
{
int i,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20} ;
/***********SPACE***********/
while(【?】)
{
for(i=1 ; i<=10 ; i++)
a[i-1]=a[i-1]/2+a[i]/2 ;
a[10]=a[10]/2+a[0] ;
for(i=1 ; i<=10 ; i++)
/***********SPACE***********/
if(【?】) a[i]++ ;
for(i=1 ; i<10 ; i++)
/***********SPACE***********/
if(a[i]!=a[i+1]) 【?】;
if(i==10)
break ;
else
{
a[0]=0 ;
count++ ;
}
}
printf("count=%d number=%d\n",count,a[1]) ;
}
uj5u.com熱心網友回復:
#include <stdio.h>
/*發現是奇數,補1,
*/
void add_odd(int a[], int num)
{
int i = 1;
for (; i < num; i++)
{
if (a[i] % 2 != 0)
{
a[i]++;
}
}
}
/*相等回傳1, 不相等回傳0,表示還要繼續分*/
int check(int a[], int num)
{
int equal = 1;
int i = 1;
for (; i < num; i++)
{
if(a[i] != a[1])
return 0;
}
return equal;
}
void main()
{
int i, count = 0, a[11] = {0, 10, 2, 8, 22, 16, 4, 10, 6, 14, 20};
/***********SPACE***********/
while (1)
{
if(1 == check(a, 11)){
printf("count=%d number=%d\n", count, a[1]);
break;
}
add_odd(a, 11); //補奇數, 有可能補完就相等了,
if(1 == check(a, 11)){
printf("count=%d number=%d\n", count, a[1]);
break;
}
/*************/
a[0] = 0; //因為a[0]總是用來保存a[1]的一半
for(i = 1; i < 11; i++){
a[i-1] = a[i -1] /2 + a[i] /2;
}
a[10] = a[10] /2 + a[0];
count++;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88688.html
標籤:C語言
下一篇:C語言背包問題
