注册 登录
编程论坛 C++教室

c++:报数问题,,,,,, 不知道怎么总是 wa 求解

风雨123 发布于 2013-06-09 10:46, 524 次点击
描述

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;
}

1 回复
1