若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

3334: 士兵队列训练问题

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,208

题目描述

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止(必须当前报数结束)。

比如10个人,最后剩下的是1和7

输入

本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

输出

共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。

样例输入

2
20
40

样例输出

1 7 19
1 19 37

参考代码

#include<stdio.h>
#include<string.h>
int main() 
{
    int T;
    scanf("%d",&T);
    while(T--) 
    {
        int n,lef;
        int a[5000];
        int i,k;
        scanf("%d",&n);
        lef=n;
        memset(a,1,n*sizeof(int));
        while(lef>3) 
        {
            k=0;
            for (i=0;i<n;i++) 
            {
                if(a[i])
                                    k++;
                if(k==2) 
                {
                    k=0;
                    a[i]=0;
                    lef--;
                }
            }
            if(lef<=3)
                            break;
            k=0;
            for (i=0;i<n;i++) 
            {
                if(a[i])
                                    k++;
                if(k==3) 
                {
                    k=0;
                    a[i]=0;
                    lef--;
                }
            }
        }
        for (i=0;i<n;i++)
                    if(a[i])
                        printf("%d ",i+1);
        printf("n");
    }
}

解析

暂无

hustoj

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Dreams孤独患者 Skip 原站点
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist