高手帮我看下这个程序,谢了,我是菜鸟..
原题:10个小孩围一圈.老师给10个小孩依次分别给 10块.2块.8块.22块.16块.4块.10块.6块.14块.20块糖.然后所有的孩子同时将手里的糖分一半给右边的孩子(第一个给第二个这样的顺序)糖块为奇数的可以向老师要一块.经过这样几次后,大家手中的糖块一样多?每人几块?
我的解答是:
main()
{
int a[10]={10,2,8,22,16,4,10,6,14,20}
int i,j,n;
for(j=0;a[j]!=a[j+1];j++)
for(i=0;i<10;i++)
if(a[i]%2)
a[i]=a[i+1];
a[i+1]=a[i+1]+a[i]/2;
}
我就只会编这些了,麻烦哪个大哥帮我修改下,小弟在这里谢过了...
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define BOOL int
#define TRUE 1
#define FALSE 0
void give(int a[]);
BOOL check(int a[]);
int main(void)
{
int a[10] = {10, 2, 8, 22, 16, 4, 10, 6, 14, 20};
int count = 0;
while(!check(a))
{
give(a);
count++;
}
printf("经过 %d 次交换后,大家手里各有 %d 块糖。", count, a[0]);
return 0;
}
void give(int a[])
{
int i, b[10];
for(i = 0; i < 10; i++)
{
if(1 == a[i] % 2)
{
b[(i + 1) % 10] = (a[i] + 1) / 2;
a[i] = (a[i] + 1) / 2;
}
else
{
b[(i + 1) % 10] = a[i] / 2;
a[i] = a[i] / 2;
}
}
for(i = 0; i < 10; i++)
{
a[i] += b[i];
}
}
BOOL check(int a[])
{
int i;
for(i = 0; i < 9; i++)
{
if(a[i] != a[i + 1])
return FALSE;
}
return TRUE;
}
----------------解决方案--------------------------------------------------------