東東在玩遊戲「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轉換成...