題目概述:
給定乙個自然數n,找出乙個m,使得m > 0且m是n的倍數,並且m的10進製表示只包含0或1。求最小的m。
例如:n = 4,m = 100。
input
輸入1個數n。(1 <= n <= 10^6)output
輸出符合條件的最小的m。input示例
4output示例
100思路: 因為每一次都只有0或者1兩個選擇,並且m的位數由1位逐次遞增,我們就可以用廣度優先搜尋的方式逐層拓展求出最先得到的那個m 即為最小的n的倍數。由於題目只說明m>=1,並未指明上限
m可能遠遠超出long long 的範圍,所以我們用對n的餘數來判斷當前的m是否滿足,在儲存餘數的同時我們需要儲存m的狀態保證找到結果時能正確輸出m;在這裡我們還需要做乙個優化就是,對於
已經出現過的餘數,在拓展下去也是無用,所以我們保證每個餘數只出現一次,這樣就大大的優化了時間!好了話不多說直接上**
**如下:
1 #include2 #include3 #include4 #include5 #include67using
namespace
std;
8const
int maxn =5e6;
9struct
node;
13bool vis[maxn];//
用於剪枝 避免重複計算 浪費時間
14 queueq;
15int
n;16
void
bfs()
1733
for(int i=0;i<=1;i++)
3444}45
}46}47
intmain()
4854
return0;
55 }
51 nod 1109 01組成的N的倍數
1109 01組成的n的倍數 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 給定乙個自然數n,找出乙個m,使得m 0且m是n的倍數,並且m的10進製表示只包含0或1。求最小的m。例如 n 4,m 100。input 輸入1個數n。1 n 10 6 output ...
51Nod 1109 01組成的N的倍數
1109 01組成的n的倍數 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 給定乙個自然數n,找出乙個m,使得m 0且m是n的倍數,並且m的10進製表示只包含0或1。求最小的m。例如 n 4,m 100。input 輸入1個數n。1 n 10 6 output ...
51Nod 1109 01組成的N的倍數
題目鏈結 思路 一開始看的到這個題時,想都沒想直接乙個暴力上去了,結果很顯然。再後來做完後面的題,在回看這個題時,想到了廣搜。寫乙個簡單 沒剪枝 的廣搜,自己隨便測試一下,乙個9能測出來,然後直接就上了5個9,電腦直接宕機了 電腦效能太差 沒辦法啊!開機重啟,中間又花費了很多時間,我不死心,又重新測...