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.输出的格式一定要看好问题的描述或者看示例输出

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/carry-2017/p/7199477.html
Copyright © 2011-2022 走看看