有n只猴子,从1开始报数,报到m的猴子离开,剩下的猴子接着从1开始报数。
主要在于模拟整个过程。
#include<stdio.h> int main() { int n,m; int a[301]; while(scanf("%d%d",&n,&m)) { if(n==0 && m==0) break; for(int i=1;i<=n;i++) a[i] = i; int t=0; //报号 int j=1; //猴子索引 int num=n; //当前剩余猴子数量 while(1) { while(a[j]==0) { j=(j+1)%n; if(j==0) j=n; } t++; //当前第j个猴子报了一个数 if(t==m) { t=0; num--; a[j]=0; } if(num==1) break; //找下一个猴子报数 j=(j+1)%n; if(j==0) j=n; } int i=1; while(a[i]==0) i++; printf("%d\n",i); } return 0; }