7.4每日B题

    技术2026-02-22  6

    题意

    有两个数n和m,每次可以对n进行乘2处理或者减1处理,问最少多少次可以把a变成b。

    思路

    我们可以通过逆向思维,看如何把m变成n。所以就会有除以2和加1两种操作。m除以2则m会变小,m加1则m会变大。当每次操作时有两种情况。第一种是n>m时,m变成n要变大,就要一直加1。第二种是n<m的情况:此时就要让m进行除以2操作,所以当m为偶数的时候,直接除以2;当m为奇数的时候要先进行一次加1操作变成偶数再进行除以二操作。

    #include<iostream> using namespace std; int main() { int n,m; int s=0; cin>>n>>m; while(n!=m) { s++; if(n<m) { if(m%2!=0) { m++; } else { m/=2; } } else m++; } cout<<s; return 0; }
    Processed: 0.010, SQL: 10