解题思路:本题的主要难题在于如何“把小朋友手里糖果的一半分给左手的小朋友”,我们必须使用数组来存储数据,并按照数据结构中类似链表的逻辑把普通数组构成造成一个循环数组,这样,最后一个小朋友才能得到第一个小朋友手里的糖果。

注意事项:注意数组作为函数参数时的定义格式和全局变量的使用。谢谢观看,如有疑问请指教。学习交流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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论