Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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이면 그 차이를 반환하므로 N이 될 때까지 단계 수는 M에 1을 더합니다.
    • 그렇지 않으면 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