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

C++에서 주어진 연산을 수행하여 숫자를 1로 줄입니다.

<시간/>

입력으로 정수 Number가 제공됩니다. 목표는 입력 수를 1로 줄이는 데 필요한 최소 단계 또는 작업 수를 찾는 것입니다. 수행할 수 있는 작업은 다음과 같습니다.

  • 숫자가 짝수이면 2로 나눕니다.

  • Number가 홀수이면 1씩 증가 또는 감소합니다.

예시

입력 − 숫자=28

출력 − 28을 1:6으로 줄이기 위한 최소 단계

설명 -

28은 짝수입니다. 2로 나누기 =14

14는 짝수입니다. 2로 나누기 =7

7은 홀수입니다 - 1씩 증가 =8

8은 짝수입니다. 2로 나누기 =4

4는 짝수입니다. 2로 나누기 =2

2는 짝수입니다. 2로 나누기 =1

입력 − 숫자=9

출력 − 9를 1:4로 줄이기 위한 최소 단계

설명 -

9는 홀수입니다 - 1만큼 감소 =8

8은 짝수입니다. 2로 나누기 =4

4는 짝수입니다. 2로 나누기 =2

2는 짝수입니다. 2로 나누기 =1

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

이 접근 방식에서는 재귀적 접근 방식을 사용하여 Number를 1로 줄이는 데 필요한 최소 작업을 확인합니다. 단순히 2로 나누는 경우에도 Number+1 또는 Number-1 중 더 작은 값에 대한 최소 방법을 재귀적으로 확인합니다.

  • 입력된 숫자를 정수로 사용합니다.

  • 함수 minWays(int num)는 num을 입력으로 사용하고 num을 1로 줄이는 데 필요한 최소 작업 수를 반환합니다.

  • 변수 tmp1, tmp2 및 min을 정수로 사용합니다.

  • num이 0이면 1을 반환합니다.

  • num%2==0이면 짝수이고 num=num/2

    로 설정합니다.
  • num이 홀수이면 tmp1=minWays(num-1) 및 tmp2=minWays(num+1)로 설정합니다.

  • 최소 설정은 tmp1 및 tmp2의 최소값입니다.

  • 1+분을 반환합니다.

  • 결국 우리는 원하는 결과를 얻을 것입니다.

  • 메인에서 결과를 출력하세요.

예시

#include <iostream>
using namespace std;
int minWays(int num){
   int tmp1,tmp2,min;
   if (num == 1){
      return 0;
   }
   else if (num % 2 == 0){
      tmp1=minWays(num/2);
      return (1 + tmp1);
   }
   else{
      int tmp1=minWays(num - 1);
      int tmp2=minWays(num + 1);
      int min=tmp1<tmp2?tmp1:tmp2;
      return (1 + min);
   }
}
int main(){
   int Number = 21;
   cout <<"Minimum steps to reduce "<<Number<<" to 1: "<<minWays(Number);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Minimum steps to reduce 21 to 1: 6