東東在玩遊戲「game23」。
在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出-1。
input
輸入的唯一一行包括兩個整數n和m(1<=n<=m<=5*10^8).
output
輸出從n轉換到m的操作次數,否則輸出-1.
****** input 1
120
51840
****** output 1
7
****** input 2
42
42
****** output 2
0
****** input 3
48
72
****** output 3
-
1
簡單的數學思路:
n
經過若幹部×2或×3
操作到m
,說明m
一定能夠整除n
,且除數一定能夠被2
或者3
整除。
到這我們可以使用dfs或者遞迴寫出來。但是可能會超時,沒試。
接著思考,從n到m過程中,與×2
或者×3
的順序是沒有影響的;
比如 從1到24的過程;
1 > 2 > 4 > 8 > 24可以看出來,只與1 > 3 > 6 > 12 >24
1 > 2 > 6 >12 >24
…
×2
或者×3
的次數相關,與順序無關。
那麼迭代即可求出答案;
#include
using
namespace std;
int n,m;
intmain()
int p=m/n;
//除數
while
(p%3==0
) p/=3
,ans++
;//除3
while
(p%2==0
) p/=2
,ans++
;//除2
if(p!=1)
printf
("%d"
,ans)
;return0;
}
數學題。。。。 LLLYYY的數字思維(模擬題)
lllyyy很喜歡寫暴力模擬貪心思維。某一天在機房,他突然拋給了隊友ppq一 個問題。問題如下 有乙個函式f int f int x return tmp 接著lllyyy給定乙個整數 c,要求在c範圍內找兩個整數a和b,使得a b c,且f a f b 的值最大。採用多組輸入方式。每行輸入乙個整數...
java模擬題第十題 數字黑洞
size medium 任意乙個5位數,比如 34256,把它的各位數字打亂,重新排列,可以得到乙個最大的數 65432,乙個最小的數23456。求這兩個數字的差,得 41976,把這個數字再次重複上述過程 如果不足5位,則前邊補0 如此往復,數字會落入某個迴圈圈 稱為數字黑洞 比如,剛才的數字會落...
藍橋模擬題 數字遞增的數
問題描述 乙個正整數如果任何乙個數字不大於右邊相鄰的數字,則稱為乙個數字遞增的數,例如1135是乙個數字遞增的數,而1024不是乙個數字遞增的數。給定正整數 n,請問在整數 1 至 n 中有多少個數字遞增的數?輸入格式 輸入的第一行包含乙個整數 n。輸出格式 輸出一行包含乙個整數,表示答案。樣例輸入...