⑴ 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個元素。