• 1 2报序


     

      

                                                  

    /*Font: Times New Roman | Verdana | Georgia

     Font Size: ← →

    Problem Description

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

    Input

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

    Output

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

    Sample Input

    2 20 40

     Sample Output

    1 7 19 1 19 37 */                                                  

     #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
    int q,i,t,m,k,h,n,a[6000],l;
    scanf("%d",&t);
    while(t--)
    {
    scanf("%d",&n);
    for(i=0;i<n;i++)
    a[i]=i+1;
    m=0;
    k=0;
    l=0;
    h=2;
    if(n<=3)
            {
                for(i=0;i<n;i++)
                    if(i==0)
                        cout<<a[i];
                    else
                        cout<<" "<<a[i];
                    printf("\n");
                    continue;
            }
    while(1)
    {
    if(a[l]!=0)
    k++;
    l++;
       if(k%2==0&&h%2==0&&k!=0)
       {
       a[l-1]=0;
       k=0;
       m++;
       }
      if(k%3==0&&h%2==1&&k!=0)
      {

      a[l-1]=0;
      k=0;
      m++;
      }
      if(l==n)
       {
      if(m>=n-3)
      break;
       h++;
       l=0;
       k=0;
       }
     
    }
    q=0;
    for(i=0;i<n;i++)
    {
    if(a[i]!=0&&q==1)
    cout<<" "<<a[i];
    if(a[i]!=0&&q==0)
    {
    cout<<a[i];
    q=1;
    }
    }
    printf("\n");
    }
    return 0;
    }



    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <cmath>
    using namespace std;
    int r[5003];
    int main()
    {
        int N,n,t;
        int i,k;
        scanf("%d",&N);
        while(N--)
        {
            scanf("%d",&n);
            for(i=1;i<=n;i++)
              r[i]=i;
              t=0;
            while(n>3)
            {
                if(t==0)
                {
                   for(i=1;i<=n;i++)
                     if(i%2==0)
                       r[i]=0;
                   for(k=1,i=2;i<=n;i++)
                      if(r[i]!=0)
                        r[++k]=r[i];
                    n=k;
                   t=(t+1)%2;
                }
                else
                {
                    for(i=1;i<=n;i++)
                     if(i%3==0)
                       r[i]=0;
                   for(k=1,i=2;i<=n;i++)
                      if(r[i]!=0)
                        r[++k]=r[i];
                    n=k;
                    t=(t+1)%2;
                }
            }
            for(i=1;i<n;i++)
             printf("%d ",r[i]);
            printf("%d\n",r[n]);
        }
        return 0;
    }

  • 相关阅读:
    减轻Temporal AA 的 拖影问题(ghosting)
    UE4开发PSVR游戏流程
    3.1 使用STC89C52控制MC20拨打电话
    2.6 基于ARDUINO UNO+MC20的路径显示功能
    2.5 使用ARDUINO做主控,手机发送短信控制开关LED
    2.4 使用ARDUINO控制MC20进行GPS数据的获取和解析
    2.3 使用ARDUINO控制MC20进行GPRS的TCP通讯
    2.2 使用ARDUINO控制MC20发短信
    2.1 使用ARDUINO控制MC20打电话
    1.8 使用电脑测试MC20的GPRS功能
  • 原文地址:https://www.cnblogs.com/heqinghui/p/2616662.html
Copyright © 2020-2023  润新知