zznuoj 1195 : 猴子選大王(結構體專題)
阿新 • • 發佈:2018-12-05
題目描述 n只猴子圍坐成一個圈,按順時針方向從1到n編號。然後從1號猴子開始沿順時針方向從1開始報數,報到m的猴子出局,再從剛出局猴子的下一個位置重新開始報數,如此重複,直至剩下一個猴子,它就是大王。 輸入 輸入兩個整數n和m,1<=m<=n<=100。 輸出 輸出猴王的編號 樣例輸入 複製 8 3 樣例輸出 複製 7
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5using namespace std; 6 #define N 200 7 struct monkey{ 8 int xu;//猴子的序號 9 int biao;//標記猴子是否出局 10 }monk[N]; 11 int main() 12 { 13 int n,m,i,j,k,flag,t,sum; 14 while(scanf("%d %d",&n,&m)!=EOF) 15 { 16 for(i=1;i<=n;i++) 17 { 18 monk[i].xu=i; 19 monk[i].biao=0; 20 }//初始化 21 flag=0; 22 k=0; 23 while(flag!=1)//當只剩下一隻猴子沒有出局時跳出 24 { 25 for(i=1;i<=n;i++) 26 { 27 /*sum=0; 28 for(j=1;j<=n;j++) 29 { 30 if(!monk[j].biao) 31 {32 sum++; 33 t=j; 34 } 35 } 36 if(sum==1) 37 break;*/ //把這部分刪掉的話 當m=1時,沒有結果,但可以提交正確(後臺資料--2333) 38 //審題需要考慮特殊情況,最好加上 39 if(!monk[i].biao)//如果該猴子沒有出局 40 { 41 k++; 42 if(k==m) 43 { 44 monk[i].biao=1; 45 k=0;//重新開始報數 46 } 47 } 48 } 49 sum=0;// 統計還有幾隻猴子沒有出局 50 for(i=1;i<=n;i++) 51 { 52 if(!monk[i].biao) 53 { 54 sum++; 55 t=i;// 最後更新為最後一隻沒有出局的猴子 56 } 57 } 58 if(sum==1) 59 flag=1;//跳出迴圈 60 } 61 printf("%d\n",t); 62 } 63 return 0; 64 }