幸运儿

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(" ");
        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(" ");
        m=1;
        t=1;
    }
 
 }
原文地址:https://www.cnblogs.com/--lr/p/6141758.html