幸运儿
n 个人围成一圈, 并依次编号1~n,。从编号为1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
输入
有多个测试序列。每行是开始时的人数n
输出
第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格分开。
样例输入
12
20
45
样例输出
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
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 3 7 11 15 19 23 27 31 35 39 43 5 13 21 29 37 45 9 25 41 17
1 33
代码
#include<stdio.h>
int
main()
{
int
count = 0,a[80],i,sum,n,m=1,t=1;
while
(
scanf
(
"%d"
,&n)!=EOF)
{
for
(i=1;i<=n;i++)
{
a[i]=1;
}
sum=n;
while
(sum>2)
{
for
(i=1;i<=n;i++)
{
if
(a[i]==1)
{
count++;
if
(count%2==0&&t==1)
{
a[i]=0;
printf
(
"%d"
,i);
count=0;
sum--;
t=2;
}
else
if
(count%2==0&&t!=1)
{
a[i]=0;
printf
(
" %d"
,i);
count=0;
sum--;
}
}
}
count=0;
}
printf
(
"\n"
);
for
(i=1;i<=n;i++)
{
if
(a[i]==1&&m==1)
{
printf
(
"%d"
,i);
m=2;
}
else
if
(a[i]==1&&m==2)
{
printf
(
" %d"
,i);
}
}
printf
(
"\n"
);
m=1;
t=1;
}
}