一道猴子选大王的题
在别的论坛看到的.题目如下:有N只猴子选大王,它们的选举办法是这N只猴子围成一圈,然后从其中一只开始从一报数到X,当念到X的猴子就被淘汰.又从淘汰的下一只猴子开始从一报数到X,直到最后留下的一只就是大王.找出最后留下的那只猴子是第几只.下面是我写的一个程序,头绪有点乱。
程序代码:
#include <stdio.h> #include <math.h> main() { int b,c,m,n,i,y,a=0,x[1000]; /*M猴子总数,B是报数的数,X数组存放猴子编号*/ printf("input two numbers:\n\t");/*提示输入个数和报数数*/ scanf("%d %d",&m,&b); c=m; /*保留M的原值,以备后用*/ for(i=0;i<=m;i++) /*给X数组付值,值刚好是从0到M的数*/ x[i]=i; y=b%m; for(m;m>1;m--) /*第一重循环,控制猴子个数*/ { if(b%m<a) /*确定将要淘汰猴子的位置*/ y=b%m+m-a; else y=b%m-a; if(y==0) y=m; x[c+1]=x[y]; for(n=y;n<m;n++) /*第二重循环,把淘汰以后数全部往前挪一个位置,以确保下次少一只猴子。*/ x[n]=x[n+1]; x[m]=x[c+1]; a=m-y; /*目前的猴子数与淘汰猴子位置的差*/ } printf("\n第一个数是最后留下的编号.后九个依次倒数淘汰的.\n"); for(i=1;i<=10;i++) printf("%d\t\b",x[i]); printf("\n\n"); getch(); }
[ 本帖最后由 budong998 于 2010-12-18 23:43 编辑 ]