• JZOJ 1781. Number


    题目

    Description

      给出一个整数 ,你可以对 进行两种操作。
      1、将x变成4x+3
      2、将x变成8x+7
      问,最少通过多少次操作,使得x是1000000007的倍数?
     

    Input

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

    Output

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

    Sample Input

    【样例输入1】
    125000000
    【样例输出1】
    1
    
    【样例输入2】
    281250001
    【样例输出2】
    2
    
    【样例输入3】
    18426114
    【样例输出3】
    58
    
    【样例输入4】
    705616876
    【样例输出4】
    100000
    

    Sample Output

     
     

    Data Constraint

     
     

    Hint

    【数据约定】
    对于50%的数据,答案不超过10
    对于80%的数据,答案不超过1000
    对于100%的数据,答案不超过100000

     

    分析

     

    •  设原数为n
    • 4n+3= n<<2+3(11)相当于在原数上末尾添加两个一
    • 8n+7= n<<3+7(111) 相当于在原数上加三个一
    • 所以 我们直接每次加末尾一个一
    • 直接枚举到能mo为止
    • 记得加1以后还要mo哦

    代码

     1 #include<iostream>
     2 #define mo 1000000007
     3 using namespace std;
     4 int find(long long x)
     5 {
     6     int ans=0;
     7     while (x)
     8     {
     9         x-=x&(-x);
    10         ans++;
    11     }
    12     return ans;
    13 }
    14 int main ()
    15 {
    16     long long n;
    17     cin>>n;
    18     int ans=0;
    19     int cha=0;
    20     while (n%mo!=0)
    21     {
    22         n<<=1;
    23         n+=1;
    24         n%=mo;
    25         cha++;
    26     }
    27     if ((cha%3)==1)
    28         ans+=cha/3+1;
    29     else if ((cha%3)==0)
    30        ans+=cha/3;
    31     else if ((cha%3)==2)
    32        ans+=cha/3+1;
    33     cout<<ans;
    34 }

     

    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    SQL函数 Convert,dateadd
    WebBrowser.ExecWB的完整说明
    GetShortPathName函数
    winmm.dll包含函数
    C# 操作Excel大全
    C#操作目录和文件
    File操作
    C#中对EXCEL保存的SAVEAS方法说明
    dataTable 、dataView、Dataset 区别
    System.Windows.Forms.Application.DoEvents();
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/11158252.html
Copyright © 2020-2023  润新知