时间限制1.00s 内存限制256.00MB 难易度:普及+/提高
【题目描述】
n 个人的编号是 1∼n,如果他们依编号按顺时针排成一个圆圈,从编号是 1 的人开始顺时针报数。
(报数是从 1 报起)当报到 k 的时候,这个人就退出游戏圈。下一个人重新从 1 开始报数。
求最后剩下的人的编号。这就是著名的约瑟夫环问题。
本题目就是已知 n,k 的情况下,求最后剩下的人的编号。
【输入格式】
题目的输入是一行,2 个空格分开的整数 n,k。
【输出格式】
要求输出一个整数,表示最后剩下的人的编号。
【输入输出样例】
输入 #1
10 3
输出 #1
4
【说明/提示】
0<n,k<10^6。
时限 1 秒, 256M。蓝桥杯 2018 年第九届国赛
【算法分析】
约瑟夫环问题 公式:
f ( 1 ) = 0
f ( n ) = ( f ( n − 1 ) + k ) % n
听说今年(2024)的春晚刘谦表演的魔术就是用到了这个原理
【参考代码】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,k,s=0;
cin>>n>>k;
for(int i=2;i<=n;i++)
s=(s+k)%i;
cout<<s+1;
return 0;
}
标签:AC,P8671,题目,int,约瑟夫,蓝桥,编号,报数
From: https://blog.csdn.net/Ryan1229/article/details/137357466