WEEK10 作業 A 簽到題

2021-10-05 13:59:40 字數 979 閱讀 2479

東東在玩遊戲「game23」。

在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出-1。

輸入的唯一一行包括兩個整數n和m(1<=n<=m<=5*10^8).

輸出從n轉換到m的操作次數,否則輸出-1.

120

51840

7
42

42

0
48

72

-

1

這是一道動態規劃問題。

從n開始乘2或乘3直至得到m。利用solve(x,cnt)函式遞迴實現,x表示逐步乘得到的n的某個倍數,cnt表示從n乘到x乘了多少次。若x==m,直接將cnt賦值給記錄答案的ans,將用來記錄成功與否的suc置為真。若x>m,說明x大小已經超過m,再乘也不會得到m了,不改變任何值,直接返回。否則,將x乘3、乘2,進入下一輪迴圈。在乘3與乘2之間加入檢查suc值的步驟(若suc=1說明成功,返回,不進行乘2操作),可有效剪枝。

最後,檢查suc的值,為真說明成功,輸出ans,為假則輸出-1。

#include #include #include #include using namespace std;

int n,m,ans;

bool suc=0;

void solve(int x,int cnt)

if(x>m)

solve(x*3,cnt+1);

if(suc)

solve(x*2,cnt+1);

}int main(int argc, char** ar**)

else

return 0;

}

week10 作業A 簽到題

東東在玩遊戲 game23 在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出 1。input 輸入的唯一一行包括兩個整數n和m 1 n m 5 10 8 output 輸出從n轉換到m的操作次...

Week10作業 A 簽到題

東東在玩遊戲 game23 在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出 1。輸入的唯一一行包括兩個整數n和m 1 n m 5 10 8 輸出從n轉換到m的操作次數,否則輸出 1.如果m不...

week10作業 A 簽到題

首先判斷 若n能夠轉換成m,那麼n一定整除m,即 m n 0 為真 滿足上述條件後,還需要要求m n中不能有除了1 2 3之外的因子 a 簽到題 東東在玩遊戲 game23 在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成...