题目是这样的:
题目描述
n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。
输入
输入两个整数n和m,1<=m<=n<=100。
输出
输出猴王的编号
样例输入 Copy
8 3
样例输出 Copy
7
来源/分类
问题是测试时有一组数据答案错误:
//用的笨方法,若有更好思路,求指点
//这个是测试用的工程文件,于是把常用的头文件都打上了,可能有多余的
#include<stdio.h>
#include<stdlib.h>
#include <limits.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
int main()
{
int n, m;
int k, s, i = 1;
scanf("%d %d", &n, &m);
if(n == 1)//只有一个猴子,直接称王
printf("1");
else
{
int r = n;
int number[101];
for (int j = 0; j < 101; j++) number[j] = 1;
while (n > 1)
{
s = 0;
for (i; i < r + 1; )
{
if (number[i] == 0)//当前位置的猴子被淘汰了,跳过
{
i %= r;
i++;
continue;
}
else s++;//计数=1
if (s == m)//当数了m个数时
{
number[i] = 0;//当前位置的猴子淘汰
i %= r;
i++;
n--;//总猴子数量-1
break;
}
i %= r;
i++;
}
if (n == 1)//只剩下1个猴子时,结束
{
for (int t = 1; t <= r; t++)//寻找那个猴子
{
if (number[t] == 1)
{
k = t;
break;
}
}
}
}
printf("%d", k);//输出
}
return 0;
}