【题解】幸运儿
【题目描述】
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; }
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。