题目(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;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步