⑴ c语言编程,10个小朋友围成一圈分糖果。
#include<stdio.h>
voidrerange(intx[])
{
inttemp=x[0]/2,l,m;
l=temp;
for(inti=1;i<10;i++)
{
m=x[i]/2;
x[i]=m+temp;
temp=m;
}
x[0]=temp+l;
for(inti=0;i<10;i++)
{
printf("%d",x[i]);
if(x[i]%2)
{
x[i]+=1;
}
}
printf(" ");
}
intmain()
{
inta[10]={12,2,8,22,16,4,10,6,14,20};
intn=5;
for(inti=0;i<n;i++)
{
printf("第%d次调整: ",i+1);
rerange(a);
}
return0;
}//解决请采纳
⑵ C语言 有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子
#include <stdio.h>
#define N 9999
int main()
{
int n,a[N],*p,i=0,out=0,count=0;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>=10000)
printf("n is out of range of valid values.");改为printf("%d is out of range of valid values.",n);
else
{
for(i=0;i<=n;i++) 改为a[i]=i;
a[i+1]=i; //这样做a[0]是个不确定的值,执行完p=a;后*p
p=a; 的值也是不确定的,后面的if判断条件不确定了
while(out!=n){ 这儿应该是out!=n-1吧
if(*p!=0) 这段可以改成这样for(;;){ if(*p!=0){
count++; count++;p++;}结束if
if(count==3){ if(count==3){ out++; out++;
*p=0; *p=0; break;}结束if
} }结束for
count=0; //此处导致count永远只能是0或1所以out的值不会变
把这儿的p++删了 p++; while就成死循环了
if(*p==a[n-1]) 把这个if语句嵌套到if(*p!=0)里的p++后面这儿不要了
p=a;
}
printf("%d",*p);
}
return 0;
}
这样改完后应该能把最后剩下的号码打出,其实可以把出局的顺序也打出来楼主想想啊,挺简单的,而且好像有很短的代码解决这个问题,多思考啊
⑶ 怎样用C语言编程积木游戏
1)第一行include语句前没有加#。不知道是不是你粘贴程序的时候漏了。
include<stdio.h>
-->
#include
<stdio.h>
2)在分积木的for循环中,应该为for
(i=0;
i<n-1;
i++),而不是i<n-2。因为在这个循环中,a[i]是获得积木的小朋友;a[i+1]是给出积木的小朋友。按照你原来的循环(i<n-2),那么最后一个获得积木的是a[n-3],最后一个给出积木的是a[n-2],这样a[n-2]就得不到a[n-1]的积木了。
3)在分积木的for循环中,a[i+1]把一半的积木分给左边的小朋友a[i]之后,剩余的积木数量却没有减少。
4)循环外处理a[0]分给a[n-1]的特殊情况时,应该是按a[0]得到a[1]的积木前的数量来算。而你现在是a[0]拿到a[1]的一半积木后,再把当前的一半分给a[n-1]。
这样修改后的代码片段为:
int
a[100],i,n,b;
...
...
b
=
a[0];
for(i=0;
i<n
-
1;
i++)
{
a[i]
+=
a[i+1]
/
2;
/*把自己的积木分一半给左边的小朋友*/
a[i+1]
/=
2;
}
a[i]
+=
b
/
2;
a[0]
-=
b
/
2;
⑷ C语言编程:十三个小孩围成圈做游戏 从第3个人开始循环报数,报数为5者出圈,接着重新报数,求出圈
循环队列,队尾下一个元素指向队首。从队首开始模拟整个过程,用一个数组记录出圈的元素,直到队列里只剩下2个元素。