饥饿的小易

饥饿的小易

小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4* x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等)。小易需要你帮忙计算最少需要使用多少次神秘力量就能吃到贝壳。

输入描述:
输入一个初始位置x_0,范围在1到1,000,000,006

输出描述:
输出小易最少需要使用神秘力量的次数,如果使用次数使用完还没找到贝壳,则输出-1

示例1
输入
125000000
输出
1

解题思路
对于 4* x + 3或者8 * x + 7都可以通过2x+1得到
4
x+3 = 2*(2x+1)+1
所以只需要进行2
x+1的迭代,最后看迭代了多少次
假设是n次,那么就只需要保证3次迭代(=8*x+7)醉倒就行

#include<iostream>
using namespace std;
int main()
{
    long long x0;
    cin >> x0;
    int i = 1;
    for(;i < 300000;i++)
    {
        x0 = ((x0<<1)+1)%1000000007;
        if(x0 == 0)break;
    }
    int res = (i+2)/3;
    if(res >= 100000)cout << -1;
    else cout << res;
}

猜你喜欢

转载自blog.csdn.net/weixin_40936298/article/details/82902356