算法刷题记录: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;
}
}
posted @   想个昵称好难ABCD  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示