题目(4)答案

经典的约瑟夫问题
队列

#include <iostream>
#include <cstdio>
#include <windows.h> 

using namespace std;

bool visit[10000000] = {0};//visit赋初始值

int main()
{
	while(true){
    int n, s = 0;
	scanf("%d", &n);
    for(int k = 0; k < n; k++)
    {//总共要出队n次
        for(int i = 0; i < 3; i++)
		{
			//1,0000,0000
			if(++s > n)
				s = 1;
			if(visit[s])
				i--;
		}//类似取模,而因为序列是从1开始的,所以不取模,加判断;若visit过,则i--,使其继续循环
        visit[s] = true;//输出,记录已出队
    }
    printf("%d\n", s);
    system("pause");
    system("cls");
	}
    return 0;
}
发布了126 篇原创文章 · 获赞 30 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览