1. 程式人生 > >zznuoj 1195 : 猴子選大王(結構體專題)

zznuoj 1195 : 猴子選大王(結構體專題)

題目描述
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>
 5
using 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 }