一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。
輸入的唯一一行包括兩個整數n和m(1<=n<=m<=5*10^8).
輸出將n轉換成m的操作次數,如果轉換不了輸出-1。
input 1
12051840
output 1
7input 2
4242
output 2
0input 3
4872
output 3
-1
題意:把n變成m,可選操作:①乘2 ②乘3
使用dfs深搜所有操作集合,t記錄當前數值,num記錄當前運算元,flag記錄是否獲得需要的m。
分別遞迴深搜乘3操作和乘2操作,當t=m時及時停止深搜獲取當前運算元,當t大於m時返回上一層
這題是dfs的小應用,2和3的關係保證兩數之間的轉換只有一條線路可以走,二個深搜之間可新增乙個判斷,如果已經獲得需要的m就不再深搜另乙個操作了
#include
using
namespace std;
int n, m,ope=0;
bool flag =
false
;void
dfs(
int t,
int num)
if(t > m)
dfs(
3* t,num+1)
;if(flag)
return
;dfs(2
* t,num+1)
;}intmain()
SDU程式設計思維與實踐作業Week10
1本題直接暴力就可以了 include 321.lis 最長上公升子串行 嚴格遞增 我們只需要記錄0 i的最長上公升子串行就可以了 計算i 1時 若 存在j include using namespace std const int maxn 1e4 long long a maxn b maxn ...
程式設計思維與實踐 Week10 作業
給定兩個數n nn和m mm,輸出n nn經過若干次乘2或乘3後轉換為m mm的次數 首先判斷m是否能被n整除,如果能夠整除,將m除以n,之後進行迴圈,每次對m除以2或者除以3,直到m 1為止,若某次迴圈m沒有除以2或3,即次數沒有改變,說明無法轉換。include using namespace ...
程式設計思維與實踐 Week10 作業
b lis lcs c 拿數問題 ii 東東在玩遊戲 game23 在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出 1。輸入的唯一一行包括兩個整數n和m 1 n m 5 10 8 輸出從n轉...