C:n人站成一圈,報數到m的人離開隊伍,求最後剩下的是第幾人
阿新 • • 發佈:2018-11-05
//n人站成一圈,報數到m的人離開隊伍,求最後剩下的是第幾人 int lastOne(int n,int m) { if (m>n||n<=0||m<=0) { printf("Range wrong\n"); exit(EXIT_FAILURE); } int arr[n]; //陣列長度為n,值全為1,存放n個人 for (int i=0; i<n; i++) { arr[i]=1; } //計數器 int counter=0; //新第一人位置 int first=0; //新最後一人位置 int last=0; for (int i=0; i<n; i++) { //判斷第i人是否為0 if (arr[i]!=0) { //記錄新第一人的位置 if (counter==0) { first=i; } counter++; //記錄新最後一人的位置 if (counter==m-1) { last=i; } } //將第m人清零 if (counter==m) { //第一人迴圈被加兩次==m,則剩下人數已不夠m,結束 if (i==first) { break; } counter=0; arr[i]=0; } //不停遍歷 if (i==n-1) { i=-1; } } return last+1; }