首页 > 试题广场 >

围圈报数

[编程题]围圈报数
  • 热度指数:6563 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
N 个人围成一圈顺序编号,从1 号开始按1、2、3 顺序报数,报3 者退出圈外,其余的人再从1、2、3 开始报数,报3 的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。要求使用环行链表编程。

输入描述:
输入第一行为整数m表示有m组测试数据,接下来m行每行一个整数N,N不超过50。


输出描述:
输出m行,每行表示题目所求,用空格隔开。
示例1

输入

1
4

输出

3 2 4 1
只用了数组的...

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<limits.h>


int main()
{
    int n;
    scanf("%d",&n);
    while(n>0)
    {
        int num;
        scanf("%d",&num);
        int len=num;
        int people[num];
        for(int i=0;i<num;i++)
        {
            people[i]=i;
        }
        int index=0;
        while(len>0)
        {
            //报数1
            while(people[(index+num)%num]==-1)
                index++;
            index++;
            //报数2
            while(people[(index+num)%num]==-1)
                index++;
            index++;
            //报数3
            while(people[(index+num)%num]==-1)
                index++;
            printf("%d ",people[(index+num)%num]+1);
            people[(index+num)%num]=-1;
            index++;
            len--;
        }
        printf("\n");
        n--;
    }
}


发表于 2022-03-17 14:28:08 回复(0)

问题信息

上传者:小小
难度:
1条回答 6441浏览

热门推荐

通过挑战的用户

查看代码
围圈报数