题解 | #约瑟夫环#
约瑟夫环
https://ac.nowcoder.com/acm/problem/22227
约瑟夫环问题
题目简述:让一群人围成一圈从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; }