zoukankan      html  css  js  c++  java
  • 数字

    数字

    【题目描述】

        给出一个整数x,你可以对x进行两种操作。

        1、将x变成4x+3

        2、将x变成8x+7

        问,最少通过多少次操作,使得x是1000000007的倍数?

    【输入格式】

        一行,一个整数x(1<=x<=1000000006)。

    【输出格式】

        一行,表示最少的操作步数。保证答案不超过10^5。

    【样例输入1】

        125000000

    【样例输出1】

        1

    【样例输入2】

        281250001

    【样例输出2】

        2

    【样例输入3】

         18426114

    【样例输出3】

         58

    【样例输入4】

         705616876

    【样例输出4】

       100000

    【数据约定】

       对于50%的数据,答案不超过10

       对于80%的数据,答案不超过1000

       对于100%的数据,答案不超过100000

    【题目分析】

        最近数学上学了数列,什么都不会的我只能靠找规律了,进行3次1的结果等于进行2的结果

        4x+3=2(2x+1)+1,8x+7=2(2(2x+1)+1)+1

        所以我们只要用2x+1计算出需要多少步就好了,因为2是递归三遍,1是递归两遍,我们要求最小的次数,所以先/3,然后%3看它用完2之后还剩多少再/2,两个结果加起来,但这样就有一个问题,如果是一共用了7次完成 那么7/3=2,7%3=1,1/2=0,ans=2+0=2,显然这个结果是错的,第一次做的时候没考虑到,然后就很开心的wa了,为了避免这个问题,我们就需要在cnt%3之后判断一下是否为2的倍数,如果cnt%3%2==0,ans=cnt/3+cnt%3/2,否则让cnt-3也就是少用一次2,把它加给1,ans=(cnt-3)/3+(cnt%3+3)/2=cnt/3+cnt%3/2+1

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    const long long mod=1000000007;
    long long shi;
    int cnt=0;
    
    int main()
    {
        freopen("number.in","r",stdin);
        freopen("number.out","w",stdout);
        scanf("%lld",&shi);
        while(1)
        {
            shi=(shi*2+1)%mod;
            cnt++;
            if(shi==0)
                break;
        }
        int ans1,ans2,ans;
        ans1=cnt/3;
        if(cnt%3==0) 
            ans=ans1;
        else 
        {
            if(cnt%3%2==0)
                ans2=(cnt%3/2);
            else
                ans2=(cnt%3/2)+1;
            ans=ans1+ans2;
        }
        printf("%d
    ",ans);
        fclose(stdin);fclose(stdout);
        return 0;
    }
  • 相关阅读:
    高数基础知识整理12.微分方程
    x(1-x)及其更高次在区间[0,1]上的积分值
    PHP中的http协议
    php简单实现MVC
    如何用jQuery获得select的值
    面向对象思想介绍
    MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法
    js将时间转换为时间戳
    PHP中sql语句如何使用变量
    四种简单的sql语句(增删改查语句)
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5983277.html
Copyright © 2011-2022 走看看