一道猴子选大王的题
在别的论坛看到的.题目如下:有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 编辑 ]









