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

숫자 n을 1로 만드는 데 필요한 최소 연산 수를 계산하는 C++ 프로그램

<시간/>

숫자 n이 있다고 가정합니다. 우리는 이러한 작업 중 하나를 임의의 횟수만큼 수행합니다. −

  • n이 2로 나누어 떨어지면 n을 n/2로 바꿉니다.

  • n이 3으로 나눌 수 있는 경우 n을 2n/3으로 교체

  • n이 5로 나누어 떨어지면 n을 4n/5로 바꿉니다.

숫자 1을 만드는 데 필요한 최소 이동 횟수를 계산해야 합니다. 불가능하면 -1을 반환합니다.

따라서 입력이 n =10과 같으면 출력은 4가 됩니다. 왜냐하면 n/2를 사용하여 5를 얻은 다음 4n/5를 사용하여 4를 얻은 다음, 다시 n/2를 사용하여 2를 얻고 n/2를 다시 사용하여 1.

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

m :=0n이 1이 아닌 동안 다음을 수행합니다. n mod 2가 0과 같으면 다음을 수행합니다. n :=n / 2(m을 1만큼 증가) 그렇지 않으면 n mod 3이 0과 같을 때 :n :=n / 3 m :=m + 2 그렇지 않으면 n mod 5가 0과 같을 때 다음:n :=n / 5 m :=m + 3 그렇지 않으면 m :=-1 루프에서 나옵니다return m 

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include 네임스페이스 std;int solve(int n) { int m =0; 동안 (n !=1) { if (n % 2 ==0) { n =n / 2; m++; } else if (n % 3 ==0) { n =n / 3; m +=2; } else if (n % 5 ==0) { n =n / 5; m +=3; } 그렇지 않으면 { m =-1; 부서지다; } } 리턴 m;}int main() { int n =10; cout <<해결(n) < 

입력

10

출력

4