【题解】幸运儿
【题目描述】
n 个人围成一圈, 并依次编号1~n,从编号为1 的人开始,按顺时针方向每隔一人选出一个,当一圈结束之后,剩下的人重新围成一圈,再次从编号1的人开始,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
【输入描述】
有多个测试序列。每行是开始时的人数n
【输出描述】
第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格分开。
【样例输入】
12 20
【样例输出】
2 4 6 8 10 12 3 7 11 5 1 9 2 4 6 8 10 12 14 16 18 20 3 7 11 15 19 5 13 9 1 17
【参考答案】
#include<iostream>
#include<queue>
using namespace std;
int main(){
int n;
while(cin>>n){
queue<int> q;
for(int i=1;i<=n;i++){
q.push(i);
}
int k=1;
while(!q.empty()){
if(q.size()==2){
break;
}
if(q.front()==1){
k=1;
}
if(k==2){
cout<<q.front()<<" ";
q.pop();
k=1;
}else{
q.push(q.front());
q.pop();
k++;
}
}
cout<<endl;
int k1[2];
int i=0;
while(!q.empty()){
k1[i++]=q.front();
q.pop();
}
if(k1[0]>k1[1]){
cout<<k1[1]<<" "<<k1[0]<<endl;
}else{
cout<<k1[0]<<" "<<k1[1]<<endl;
}
}
return 0;
}扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

