题目(5)答案

其实很简单,只要把淘汰的人跳过,把最后一个人链接到第一个人,围一个圈,就可以,所以我们是用队列解决。
代码:

#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;
}
发布了24 篇原创文章 · 获赞 4 · 访问量 407
展开阅读全文

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

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览