约瑟夫环问题
题目简述:让一群人围成一圈从1开始报数, 报到指定数字的人出圈,然后再重新从1开始报数,最后一个没出圈的人就是“大王”。
按照题目模拟即可,利用 i = i % n + 1 来造一个圈。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 110;
int n, k, m;
int main()
{
cin >> n >> k >> m;
int a = n; //记录剩余人数
int i = k; //指针,指向当前正在报数的人
int count = 1; //记录目前报数报的是几
int arr[N] = { 0 }; //出圈的人标记一下
while (a > 1)
{
if (count == m)
{
arr[i] = 1;
count = 0;
a--;
}
else
{
i = i % n + 1;
count++;
while (arr[i] == 1)
{
i = i % n + 1;
}
}
}
for (int i = 1; i <= n; i++) //找到那个没出圈的人然后直接输出下标即可
{
if (arr[i] == 0)
cout << i << endl;
}
return 0;
}

京公网安备 11010502036488号