zoukankan      html  css  js  c++  java
  • 士兵队列训练问题

    这个问题,主要是报数,可以使用两个数组,分别用来记录相关的数值,跳过输入函数部分,当我在参考完大神的代码以后自己去敲代码,然后也没有细心去想在之后的报二报三的情况也直接就是两个从一开始的for循环,然后就测试的时候出了错误,一开始怎么想都没有想到,因为还是可能没有彻底理解吧,后来就发现了,为什么从2和三开始,因为你肯定是从大于三和大于的两种情况开始的啊,这样也可以减少一些时间, 当时其中一些原理还是希望有大神可以指导我一下,为什么从三从二开始。为什么从一开始就会是 错误的。

    #include<iostream>
    using namespace std;
    int main()
    {
        int N;
        cin>>N;
        while(N--)
        {
            int n,i,k,s=1;
            int a[5000];
            cin>>n;
            for(i=1;i<=n;i++)
            {
                a[i]=i;
            }
            while(n>3)
            {
                s++;
                k=2;
                if(s%2==0)
                {
                    for(i=3;i<=n;i++)
                    {
                        if(i%2!=0)
                        {
                            a[k]=a[i];
                            k++;
                        }
                    }
                    n=n-n/2;
                }
                else
                {
                    for(i=2;i<=n;i++)
                    {
                        if(i%3!=0)
                        {
                            a[k]=a[i];
                            k++;
                        }
                    }
                    n=n-n/3;
                }
            }
            if(n==1)
            cout<<a[1]<<endl;;
            if(n==2)
            cout<<a[1]<<" "<<a[2]<<endl;
            if(n==3)
            cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    linux基础_用户和组的三个文件
    python_文件
    linux基础_用户组的管理
    mysql基础_数据类型
    mysql基础_操作数据库、表、记录
    linux基础_用户管理
    python_集合
    linux基础_关机重启注销
    docker创建私有仓库
    制作docker镜像
  • 原文地址:https://www.cnblogs.com/yintoki/p/5676242.html
Copyright © 2011-2022 走看看