算法刷题记录:NC22227 约瑟夫环
题目链接
https://ac.nowcoder.com/acm/problem/22227
解题思路
模拟环。
这道题顺序数就行,顺序是逆时针,逆时针的箭头是往左拐的,变成直线后趋于正半轴所以是 +
。
不过,这道模拟环并没有说从idx号开始,往左/右数几个人,所以不需要考虑 +
或 -
。
因为不会越界,所以也不用额外%n
。
AC代码
#include <iostream> #include <vector> using namespace std; int n, st, m, i; vector<int> v; int main() { while (cin >> n >> st >> m) { v.clear(); for (int i = 1; i <= n; ++ i) v.push_back(i); int pos = st - 1; for (int i = n - 1; i >= 0; -- i) // 赶走n-1个人,会被淘汰n-1次 { pos = (pos + m - 1) % v.size(); // 每次从第pos个人开始,m-1:下标应当从0开始 v.erase(pos + v.begin()); // 删除第pos个人 } cout << v[pos] << endl; } }
本文来自博客园,作者:想个昵称好难ABCD,转载请注明原文链接:https://www.cnblogs.com/ClockParadox43/p/17424444.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】