题目描述
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<stdio.h>
#include<math.h>
int main()
{
int n=0;
while(scanf("%d",&n)!=EOF){
int tmp=n;
int x=1;
int arr[50];
for(int i=1;i<=n;i++){
arr[i]=0;
}
while(1){
for(int i=1;i<n;i++){
int j=1+pow(2,x-1)+(i-1)*pow(2,x);
if(j<=n){
arr[j]=1;
printf("%d ",j);
tmp--;
}
}
if(tmp==2){
break;
}
x++;
}
printf("\n");
for(int i=1;i<n;i++){
if(arr[i]==0){
printf("%d ",i);
}
}
printf("\n");
}
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
棒!!!