题目背景
约瑟夫是一个无聊的人!!!
题目描述
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.
输入格式
n m
输出格式
出圈的编号
输入输出样例
输入 #1
10 3
输出 #1
3 6 9 2 7 1 8 5 10 4
说明/提示
m,n≤100
思路
把走过的点标记一遍,只有未标记过的点才算数,如果所有点都标记过了,那么程序运行结束。(dbq, 让这种水题拉低了我的博客整体题解难度,不过也体验了一把神犇切题的快感~)
源码
#include<bits/stdc++.h>
using namespace std;
int n, m, sum = 0;
int a[100], b[100];
bool judge()
{
for (int i = 0; i < n; i++)
if (b[i] == 0)
return 0;
return 1;
}
int main()
{
cin >> n >> m;
memset(b, 0, sizeof(b));
for (int i = 0; !judge(); i++)
{
if (i == n)
i = 0;
if (b[i] == 0)
sum++;
else
continue;
if (sum == m)
{
cout << i + 1 << " ";
b[i] = 1;
sum = 0;
}
}
return 0;
}
来源:CSDN
作者:ccql
链接:https://blog.csdn.net/qq_43510916/article/details/104130304