zoukankan      html  css  js  c++  java
  • 2015 HUAS Summer Training#2~C

    Description

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

    Input

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

    Output

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

    Sample Input

    2 20 40
     

    Sample Output

    1 7 19 1 19 37
    解题思路:此题要注意的是,即使士兵的人数少于3,也要进行报数,不然题目不能提交。注意每循环一次要记得将统计的数清零。
    程序代码:
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    int a[5005];
    int main()
    {
     int n,i;
     scanf("%d",&n);
     while(n--)
     {
      int m;
      scanf("%d",&m);
      for(i=1;i<=m;i++)
       a[i]=i;
      int t=m;
      while(t>3)
      {
        int count=0;
        for(i=1;i<=m;i++)
        {
         if(a[i])
         count++;
         if(count==2)
         {
          a[i]=0;
          count=0;
          t--;
         }
        
        } if(t<=3)
         break;
        count=0;
        for(i=1;i<=m;i++)
        { 
         if(a[i])
         count++;
         if(count==3)
         {
          a[i]=0;
          count=0;
          t--;
         }
       
        }if(t<=3)
         break;
        
       
      } 
       //printf("1");
       for(i=1;i<=m;i++)
       {
        if(a[i]!=0)
        {
         if(i==1)
          printf("%d",a[i]);
         else
         printf(" %d",a[i]);
        }
       
      } 
      cout<<endl;
     } 
     return 0;
    }
  • 相关阅读:
    [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)
    CENTOS7 SYSTEMD SERVICE 将自己的程序放入自动启动的系统服务
    CentOS7 关闭selinux
    面试总结TODO
    很好用的 UI 调试技巧
    点满 webpack 技能点,让你的打包速度提效 90%
    前端缓存最佳实践
    Fiddler抓包工具总结
    按钮粒子效果
    如何优雅的在 vue 中添加权限控制
  • 原文地址:https://www.cnblogs.com/chenchunhui/p/4671938.html
Copyright © 2011-2022 走看看