张瑞凡


私信TA

用户名:zrf

访问量:884

签 名:

只要确定了远方,便只顾风雨兼程!

等  级
排  名 914
经  验 3357
参赛次数 31
文章发表 7
年  龄 18
在职情况 学生
学  校 陕西省宝鸡文理学院
专  业 计算机科学与技术

  自我简介:

勇敢过后就不留遗憾 遗憾过后就不会心碎

TA的其他文章

题目描述

n 个人围成一圈, 并依次编号1~n,从编号为1 的人开始,按顺时针方向每隔一人选出一个,当一圈结束之后,剩下的人重新围成一圈,再次从编号1的人开始,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)

输入

有多个测试序列。每行是开始时的人数n

输出

第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格分开。

样例输入

12
20

样例输出

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



代码:

#include<stdio.h>

#include<math.h>

int main()

{

    int n=0;

    while(scanf("%d",&n)!=EOF){

        int tmp=n;

        int x=1;

        int arr[50];

        for(int i=1;i<=n;i++){

            arr[i]=0;

        }

        while(1){

            

            for(int i=1;i<n;i++){

                int j=1+pow(2,x-1)+(i-1)*pow(2,x);

                if(j<=n){

                    arr[j]=1;

                    printf("%d ",j);

                    tmp--;

                }

            }

            if(tmp==2){

                break;

            }

            x++;

        }

        printf("\n");

        for(int i=1;i<n;i++){


            if(arr[i]==0){

                printf("%d ",i);

            }

        }   

        printf("\n");

    }

return 0;

}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

棒!!!
2023-10-15 21:43:25
  • «
  • 1
  • »