士兵队列训练问题

这个问题,主要是报数,可以使用两个数组,分别用来记录相关的数值,跳过输入函数部分,当我在参考完大神的代码以后自己去敲代码,然后也没有细心去想在之后的报二报三的情况也直接就是两个从一开始的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;
}

  

原文地址:https://www.cnblogs.com/yintoki/p/5676242.html