文章

17

粉丝

82

获赞

30

访问

19.2k

头像
约瑟夫问题的实现 题解:
P5104
发布于2025年1月7日 21:27
阅读数 274

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k; // 输入 n 和 k

    vector<bool> st(n + 1, false); // 标记是否被淘汰
    int ans = 0;  // 计数器,用于模拟报数
    int count = 0; // 记录被淘汰的人数
    int i = 1;    // 当前报数的人
    int c=10001;
    // 模拟过程
    while (count<n-1) {
        if(!st[i])ans++; // 报数
        if (!st[i] && ans==k) { // 如果报数是 k 的倍数且未被淘汰
            st[i] = true; // 标记为淘汰
            count++;      // 淘汰人数加 1
            ans=0;
            // cout << "淘汰: " << i << endl; // 输出淘汰的人
        }
        i++; // 下一个人
        if (i == n + 1) i = 1; // 如果超过 n,回到第一个人
    }

    // 输出最后剩下的人
    for (int i = 1; i <= n; i++) {
        if (!st[i]) {
            // cout << "最后剩下的人: " << i << endl;
            cout<<i<<endl;
            break;
        }
    }
    // cout<<c<<endl;
    // cout<<count<<endl;
    retur...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发