解题思路:本题的主要难题在于如何“把小朋友手里糖果的一半分给左手的小朋友”,我们必须使用数组来存储数据,并按照数据结构中类似链表的逻辑把普通数组构成造成一个循环数组,这样,最后一个小朋友才能得到第一个小朋友手里的糖果。
注意事项:注意数组作为函数参数时的定义格式和全局变量的使用。谢谢观看,如有疑问请指教。学习交流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 人评分
数组输出 (C语言代码)--此题的题目描述有问题浏览:1814 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5229 |
IP判断 (C语言代码)浏览:533 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:455 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:809 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:598 |
计算质因子 (Java代码)浏览:736 |
P1001 (Java代码)浏览:687 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)简单版浏览:789 |
IP判断 (C语言代码)浏览:457 |