SDU程式設計思維Week10 作業 A 簽到題

2021-10-05 09:14:15 字數 856 閱讀 5585

一開始他有乙個數字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轉...