在C ++中找到从N达到M的最小步骤数

假设我们有两个整数N和M。通过执行给定的运算,我们必须找到从N到M的最小步数-

  • 将x乘以2,因此x将为2 * x

  • 从数字x减去1,因此数字将为x – 1

如果N = 4并且M = 6,则输出将为2。因此,如果我们对N执行2号运算,则N变为3,然后对N的更新值执行1号运算,因此它变为2 * 3 = 6。因此,最小步骤数将为2。

为了解决这个问题,我们将遵循以下规则-

  • 我们可以逆转问题,就像我们从M取数字N一样,因此新的两个操作将是


    • 用偶数除以2,

    • 用数字加1

  • 现在的最小操作数为

    • 如果N> M,则返回它们之间的差,因此步数将为M加1,直到等于N

    • 否则,当N <M时,将M除以2,直到小于N。如果M为奇数,则先对其加1,然后除以2。一旦M小于N,则将它们之间的差加到计数以及上述操作的计数。

示例

#include<iostream>
using namespace std;
int countMinimumSteps(int n, int m) {
   int count = 0;
   while(m > n) {
      if(m % 2 == 1) {
         m++;
         count++;
      }
      m /= 2;
      count++;
   }
   return count + n - m;
}
int main() {
   int n = 4, m = 6;
   cout << "Minimum number of operations required: " << countMinimumSteps(n, m);
}

输出结果

Minimum number of operations required: 2