假设我们有两个整数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