c++:报数问题,,,,,, 不知道怎么总是 wa 求解
描述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; }