n 个人围成一圈, 并依次编号 1~n, 。从编号为 1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设 3<=n<=50)
输入
开始时的人数 n
输出
第 1行是选出顺序,第 2 行是两名幸运儿的开始位置(按升序排列) ,位置编号之间用一个空格分开。
输入:
12
应该的输出:
2 4 6 8 10 12 3 7 11 5
1 9
样例输入
12
样例输出
2 4 6 8 10 12 3 7 11 5
1 9

#include <iostream>
using namespace std;
int main()
{
int a[51],i,j,k,n,m,b[1],t,p;
while(cin>>n) //多用例
{
for(i=1;i<=n;i++)
a[i]=i; //一次赋值为 1,2,3,4、、、、
j=1;m=0;k=0;i=1;p=0;
while(j<n-1)
{
if(a[i]!=0)
k++;
if(k==2)
{
if(p==0)
{
cout<<a[i];
p++;
}
else if(p>0)
cout<<" "<<a[i];
j++;
a[i]=0;
k=0;
}
i++;
if(i==n+1)
i=1;
}
cout<<endl;
k=0;
for(i=1;i<=n;i++)
if(a[i]!=0)
{
b[k]=a[i];
k++;
}
if(b[0]>b[1])
{
t=b[0];
b[0]=b[1];
b[1]=t;
}
cout<<b[0]<<" "<<b[1]<<endl;
}
return 0;
}
using namespace std;
int main()
{
int a[51],i,j,k,n,m,b[1],t,p;
while(cin>>n) //多用例
{
for(i=1;i<=n;i++)
a[i]=i; //一次赋值为 1,2,3,4、、、、
j=1;m=0;k=0;i=1;p=0;
while(j<n-1)
{
if(a[i]!=0)
k++;
if(k==2)
{
if(p==0)
{
cout<<a[i];
p++;
}
else if(p>0)
cout<<" "<<a[i];
j++;
a[i]=0;
k=0;
}
i++;
if(i==n+1)
i=1;
}
cout<<endl;
k=0;
for(i=1;i<=n;i++)
if(a[i]!=0)
{
b[k]=a[i];
k++;
}
if(b[0]>b[1])
{
t=b[0];
b[0]=b[1];
b[1]=t;
}
cout<<b[0]<<" "<<b[1]<<endl;
}
return 0;
}