题目描述
有n只猴子围成一圈,从1~n编号,大家决定从中选出一个大王。经过协商,决定选大王的规则为:从编号为1的猴子开始报数,报到k的猴子出圈,然后再从下一只开始继续报1到k…最后剩下来的那只就是大王。要求编程从键盘输入n,k,输出成为大王的猴子编号。
输入
一行输入2个正整数n和k 2<=n<=1000,2<=k<=109
输出
一行一个正整数,表示猴王的编号
样例输入
3 2
样例输出
3
提示
本题可以用循环链表实现
#include <stdio.h>
int main()
{
int n,t;
while(scanf("%d%d", &n,&t)!=EOF)
{
if (n==1)
{
printf("%d\n", n);
return 0;
}
int ab[1000]={0};
for (int i=1; i <=n;i++)
{
ab[i] = 1;
}
int a = 0;
int b = 0;
int j = 1;
while (a<(n-1))
{
if (ab[j]==0)
{
j++;
if (j==(n+1) )
{
j = 1;
}
continue;
}
b++;
if (b%t= 0)
{
ab[j]=0;
a++;
}
j++;
if (j==(n+1) )
{
j=1;
}
}
for (int k=1; k<=n;k++)
{
if (ab[k]==1)
{
printf("%d\n", k);
}
}
}
return 0;
}