51nod 1109 01組成的N的倍數

2021-08-17 13:47:07 字數 974 閱讀 2302

01組成的n的倍數

給定乙個自然數n,找出乙個m,使得m > 0且m是n的倍數,並且m的10進製表示只包含0或1。求最小的m。

例如:n = 4,m = 100。

input 輸入1個數n。(1 <= n <= 10^6) output 輸出符合條件的最小的m。 sample input

4
sample output
100

解題思路:

題中只說明資料範圍為m>0,而沒有給出上限,所以有可能就是m值上限很大,可能遠超long long。因此只簡單模擬包括0和1的十進位制數來判斷是否是n的倍數不現實。因為n值為1e6,遠小於int上限,又乙個數若是n的倍數,則其對n取余為0且餘數範圍又不大。所以考慮用字串加餘數判斷來進行搜尋。

搜尋過程中可以加以剪枝來優化,具體就是說,如果過程中有乙個餘數第二次出現了,那麼這個數往後延伸出來的數是沒有意義的(即延伸出來的數肯定不是最小的n的倍數)。具體看**。

其實也就是假設在你知道最小倍數的情況下模擬除法過程。

**如下:

#include//string字串需要用cout輸出

#include#include#include#includeusing namespace std;

int book[1000010], n; //book標記餘數是否出現

struct node

;void bfs()

en.str = st.str + '0';

en.num = (st.num*10)%n; //將餘數乘10再計算

if( !book[en.num] )

en.str = st.str + '1';

en.num = (st.num*10+1)%n; //將餘數乘10加1在計算

if( !book[en.num] )

}}int main()

}return 0;

}

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,電腦直接宕機了 電腦效能太差 沒辦法啊!開機重啟,中間又花費了很多時間,我不死心,又重新測...