牛客题解 约瑟夫环

链接:https://ac.nowcoder.com/acm/problem/22227
来源:牛客网

题解

作者 岛田小雅

正统的约瑟夫环我不会,看了一眼范围直接开始乱搞了。

我选择的方法是模拟,用递归函数实现(虽然也可以不用)

设置一个递归函数 operate(),两个参数分别存正在报数的人 x 和他要报的数字 num。因为有人要出队,所以再开个 vis 数组存第 i 个人还在不在队伍里。函数要一直递归到只剩下一个人,所以再用一个变量 r 存还剩下几个人。每次一个人出队就维护 r,当 r=1 的时候,结束递归。

最后在所有 vis 里面找那个还在队伍里的人然后输出出来就好了。

我会承认写的时候样例测了好几次都没过是因为少了个 return 吗。

话说回来为什么这么像 DFS 呢……

AC 代码

作者 岛田小雅
#include <bits/stdc++.h>
using namespace std;

const int N = 1e2+2;
int n, k, m;
bool vis[N];
int r;

void operate(int x, int num)
{
    x %= n;
    if(r == 1) return;
    if(vis[x])
    {
        operate(x+1,num);
        return;
    }
    if(num == m)
    {
        vis[x] = true;
        r--;
        operate(x+1,1);
    }
    else operate(x+1,num+1);
}

int main()
{
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> k >> m;
    r = n;
    for(int i = 0; i < n; i++) vis[i] = false;
    operate(k,1);
    for(int i = 0; i < n; i++)
    {
        if(!vis[i])
        {
            cout << i;
            break;
        }
    }
    return 0;
}

作者:岛田小雅

出处:https://www.cnblogs.com/CasseShimada/p/16704267.html

版权:本作品采用「CC BY-NC-SA 4.0」许可协议进行许可。

(。・∀・)ノ゙嗨, 感谢你阅读我的博客。博主是个初来乍到的萌新,如有意见和建议欢迎私信提出嗷!

posted @   岛田小雅  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示