Cho N, M, tìm số bước tối thiểu từ N đến M với phép nhân 2 hoặc trừ 1. Ví dụ N=4, M=6 → 2 bước (4→3→6).
Đảo bài toán: từ M về N, phép chia 2 (nếu chẵn) hoặc cộng 1. Nếu N > M trả về hiệu. Nếu N < M, chia M cho 2 cho đến khi M < N, nếu M lẻ thì cộng 1 trước.
Ví dụ
#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); }
Kết quả
Minimum number of operations required: 2