解题思路:本题的主要难题在于如何“把小朋友手里糖果的一半分给左手的小朋友”,我们必须使用数组来存储数据,并按照数据结构中类似链表的逻辑把普通数组构成造成一个循环数组,这样,最后一个小朋友才能得到第一个小朋友手里的糖果。
注意事项:注意数组作为函数参数时的定义格式和全局变量的使用。谢谢观看,如有疑问请指教。学习交流QQ1490707770.
参考代码:
#include
int *sum,*re;
int main(){
int n,a[100],b[100],c=0,d=0;
void cest(int a[100],int n,int *re);
void divide(int a[100],int b[100],int n);
void repair(int a[100],int n,int *sum);
sum=&c;
re=&d;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
while(1){
cest(a,n,re);
if(*re==1)//如果不均等则补数再来一轮。
{divide(a,b,n);
repair(a,n,sum);
*re=0;}
else
{printf("%d",*sum);
break;
}}
}
void cest(int a[100],int n,int *re)//判断是否相等
{for(int j=0;j<n;j++)
if(a[0]!=a[j])
*re=1;
}
void divide(int a[100],int b[100],int n)
{for(int i=0;i<n;i++)
b[i]=a[i]/2;
for(int j=0;j<n;j++)
{if(j==n-1)
a[j]=a[j]+b[0]-b[j];
else
a[j]=a[j]+b[j+1]-b[j];
}
}
void repair(int a[100],int n,int *sum)
{for(int i=0;i<n;i++)
{if(a[i]%2!=0)
{
a[i]=a[i]+1;
*sum=*sum+1;}
}
}
0.0分
1 人评分