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

  • 相关阅读:
    FCKeditor firefox Ajax提交,内容为空.解决.
    Javascript:Go to top of page
    js实现两级联动下拉列表
    php+mysql实现二级联动下拉列表
    ajax 实现两级级联下拉列表
    SharpDevelop_3.2.1.6466_Setup软件安装汉化
    c#拓展项目作业
    摇色子(两颗色子)
    C#编程实践51题目解答
    编程实践53
  • 原文地址:https://www.cnblogs.com/carry-2017/p/7199477.html
Copyright © 2011-2022 走看看