一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的 进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号
1。本算法由两层循环组成,内层控制剔除数到编号的猴子,外层控制保证只剩一个猴子,
2:本算法利用一个累加s来控制跳出循环,当s=1时表明只剩一个猴子。
3:本算法用动态内存进行数组定义。
#include<stdio.h>
#include<stdlib.h>
main(void)
{
int n,m,i,x,s;
static int j=1;
int *p;
scanf("%d%d",&n,&m);
p=(int * )malloc(n * sizeof(int));
for(i=0;i<n;i++)
p[i]=1;
for(i=0;i<n;i++)
{
s=0;
for(x=0;x<n;x++)
{
if(p[x]!=0)
{if(j == m)
{
p[x]=0;
j=0;
}
j++;
}
s+=p[x];
}
if(s==1)
break;
}
for(i=0;i<n;i++)
if(p[i]!=0)
printf("%d\n",i+1);
free (p) ;
}