C++程式:計算將數字n變為1所需的最小操作次數


假設我們有一個數字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 := 0
while n is not equal to 1, do:
   if n mod 2 is same as 0, then:
      n := n / 2
      (increase m by 1)
   otherwise when n mod 3 is same as 0, then:
      n := n / 3
      m := m + 2
   otherwise when n mod 5 is same as 0, then:
      n := n / 5
      m := m + 3
   Otherwise
      m := -1
      Come out from the loop
return m

示例

讓我們來看下面的實現,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;

int solve(int n) {
   int m = 0;
   while (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;
      }
      else {
         m = -1;
         break;
      }
   }

   return m;
}
int main() {
   int n = 10;
   cout << solve(n) << endl;
}

輸入

10

輸出

4

更新於:2022年3月3日

315 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告