注册 登录
编程论坛 C++ Builder

士兵队列训练问题

return_0 发布于 2020-01-28 12:00, 2634 次点击
某部队进行新兵队列训练,将新兵从 11 开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数…以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

输入格式

一个整数 nn 表示新兵人数

输出格式

三个数字,表示剩下的新兵编号

数据范围

3 leq n leq 50003≤n≤5000

例子
Input
40
复制一下
Output
1 19 37
复制一下
例子
Input
20
复制一下
Output
1 7 19
复制一下
2 回复
#2
纯蓝之刃2020-01-29 14:47
程序代码:
#include<stdio.h>
#define MAX 5000

int main()
{
    int n,i,j=0,temp=3;
    int array[MAX]={0};
    printf("Input:");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
        array[i]=i;

    do
    {
        j=1;
        if(temp%3==0)
            temp--;
        else
            temp++;

        for(i=1;i<=n;i++)
        {
            if(i%temp!=0)
                array[j++]=array[i];
        }
        n=j-1;

    }while(j>4);

    printf("Output:");
    for(i=1;i<j;i++)
        printf("%d ",array[i]);

    return 0;
}
#3
return_02020-02-06 15:14
分给你了,可是老师要求的是用queue解
1