zoukankan      html  css  js  c++  java
  • 乱搞

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

    Input

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

    Output

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

    2
    20
    40

    Sample Output

    1 7 19
    1 19 37

    1,直接上代码,解决问题。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
    int ren;
    cin>>ren;
    int sum=0;
    int a[5000];  //定义数组必须给出明确的大小
    fill(a,a+5000,1);  //未确定的变量不能给未知的变量赋值
    for(;;)
    {
    if(ren-sum<=3) break;  //首先就判断,给出的人数是否是小于3 的情况!!
    int num1=2;
    for(int j=0;j<ren;j++)
    {
    if(a[j]==1) num1++;
    if(num1%2==0&&a[j]!=0)
    {
    a[j]=0;
    sum++;
    }
    }
    if(ren-sum<=3) break;
    int num2=3;
    for(int k=0;k<ren;k++)
    {
    if(a[k]==1) num2++;
    if(num2%3==0&&a[k]!=0) //不要出现重复计数的问题
    {
    a[k]=0;
    sum++;
    }
    }
    }
    for(int k=0;k<ren;k++)
    {
    if(a[k]==1&&k!=0)  //格式问题,注意把题目看完,设置一个好的节点
    cout<<" ";
    if(a[k]==1)
    cout<<k+1;
    }
    cout<<endl;
    }
    }

     2,代码简单化的问题

    • t 组数据问题

    • 判断问题

     3.输出的格式一定要看好问题的描述或者看示例输出

  • 相关阅读:
    Git centos 6.5 搭建(gitosis)
    error at ::0 can't find referenced pointcut xxx
    MySql 主从配置
    svn 搭建
    Flatbuffers学习
    python3 获取函数变量
    pyqt5 重启相同线程错误:QThread: Destroyed while thread is still running
    WIN10 使用注册表设置单应用KIOSK模式(不限win10版本)
    WIN10 使用POWERSHELL 设置单应用KIOSK模式(win10家庭版或企业版)
    py文件加密打包成exe文件
  • 原文地址:https://www.cnblogs.com/carry-2017/p/7199477.html
Copyright © 2011-2022 走看看