题目描述
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语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1884 |
C语言程序设计教程(第三版)课后习题8.1 (Java代码)浏览:776 |
弟弟的作业 (C++代码)浏览:1295 |
【密码】 (C语言代码)浏览:333 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1051 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:582 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:262 |
字符逆序 (C语言代码)浏览:455 |
简单的a+b (C语言代码)浏览:414 |
矩形面积交 (C语言代码)浏览:1294 |