1樓:匿名使用者
用連結串列寫的話比較好,資源佔用少;用陣列的話也行,如下:
#include "stdio.h"
#include
void main(void)
int result(int *p,int n,int limit);
int n=0;//總人數
int m=0;//報數截止號
int *p;
for(;;)
printf("input number of n and m :");
scanf("%d%d",&n,&m);
if (m<=0 || n<=0)
exit(0);
p=(int *)malloc(n*sizeof(int));
printf("the king is no.%d\n",result(p,n,m));
delete p;
int result(int *p,int n,int limit)
int i=0;
for(i=0;ip[i]=i+1;
i=0; // i為每次迴圈時計數變數
int k=0; // k為按1,2,3...limit報數時的計數變數
int m=0; // m為退出人數
while (mif (p[i]!=0) k++; //如果編號為0,就不報數;如果編號不為0,報數加1
if (k==limit) // 將退出的人的編號置為0
p[i]=0;
k=0;//重新開始報數
m++;//退出人數加1
i++;
if (i==n) i=0; // 報數到尾後,i恢復為0
i=0;
while(p[i]==0) i++;
return p[i];
測試結果:
2樓:
#include
#include
#define n 19 //巨集定義,設定19個猴子#define m 4 //報數最大報到4typedef struct monkey //設計一個猴子的結構體,該結構體用monkey表示
//link表示該結構體的指標
monkey,*link;
void main()
p2->next=head;//這步很重要,這樣連結串列變成迴圈連結串列了,也就是說連結串列到了結
//尾它的下個地址就是連結串列頭瞭如此不停迴圈下去,就是個圓p=head;
printf("對猴子進行編號!\n");
for(i=1;i<=n;i++)
//所有猴子編號結束
i=0;
p=head; //又將p指向了連結串列的頭
while(1)
else //沒有報到m的繼續報數 }
printf("勝出:%d",p->num);}
3樓:匿名使用者
lz你的問題描述有點問題,應該不是從剩餘的一號猴開始,而是接著報,另外倒數第2和倒數第3組測試資料貌似有點問題。
我說過20-可以搞定的, 那就決不會出現21行,呵呵。**如下,在紙上演算一下應該不難懂的。
還有問題再問我,樂意為你解答。
#include
void main()
printf("%d\n", cur+1);}
4樓:匿名使用者
#include
void monkeyking(int n, int m)while(in > 1) }}
}for(i = 0; i < n; i++) //查詢並輸出猴王
if(1 == arr[i])
printf("the king is %d\n", i+1);
}int main(void)
跪求c語言大神幫小弟看一段c程式裡的錯誤!謝謝
關於你要實現的程式的功能並沒有描述的十分清楚,我這就主要從你語法上的錯誤給予更正 include stdio.h 因為你的主函式在你要呼叫 的兩個函式的前面,因此要先宣告函式 int center to left get black int a 主函式中呼叫函式是傳了引數的,需要有形參 int ce...
C中timer控制元件的一段程式
我是這樣 做出來的。控制元件 textbox,button,timer。timer的interval值設為1000.在專案的debug目錄下放置test.txt檔案,內容為1234567890amxjdhflsjdaflkdfisdfwergghh.執行後一秒一變 using system.io p...
求大神,用C寫 使用者輸入一段字串,然後把字串按照ASCII值大小排列,並輸出
namespace test func,int?list sort null sort x,id return r var result sort data,null foreach var item in result 2 3 5 8 4 9 1 7 6 10 public static clas...