题解 | #约瑟夫环#

约瑟夫环

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;
}


全部评论
输入5 2 3,会输出5,而不是0,程序还是有点bug
1 回复 分享
发布于 2023-03-20 21:09 湖北

相关推荐

哥_留个offer先:跟他说,你这个最好用c#,微软就用c#Java不适合这个项目
点赞 评论 收藏
分享
谁知道呢_:你好,我是炮灰n+1号
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务