uva 846 Steps

    技术2024-11-21  22

    这个题描述虽然短,但不容易读明白,尤其是The length of a step must be nonnegative and can be by one bigger than, equal to, or by one smaller than the length of the previous step.这句意思是:步长一定是非负的,而且比前一步长要多一,相等或少一。

    我做的时候考虑到n*(n+1)和(n+1)*(n+1)这两个值,发现n从0,1,2,3,4, 5…… 开始时,两式取值是:0 1 2 4 6 9 12……当y-x的值在(n*(n+1),(n+1)*(n+1)]之间时,相应的“n”就是步长,但我不知如何证明

    代码如下:

     

    #include<iostream>

    using namespace std;

    long long Digit[100001];//储存n*(n+1)和(n+1)*(n+1)的值

    long long length;//步长

    void Calculate()

    {

        length = 0;

        for(long long i = 0; i < 46500; i++){

            Digit[length++] = i * (i + 1);

            Digit[length++] = (i + 1) * (i + 1);

        }

    }

    int Search(int num)//查找

    {

        for(int i = 0; i < length; i++){

            if(num <= Digit[i]){

                return i;

            }

        }

    }

    int main()

    {

        int n, begin, end;

        Calculate();

        cin>>n;

        while(n--){

            cin>>begin>>end;

            cout<<Search(end - begin)<<endl;

        }

        return 0;

    }

     

    最新回复(0)