程式設計之美2 8 找符合條件的整數

2021-06-26 00:39:35 字數 738 閱讀 5542

這個題目是,給定乙個整數 n,需要尋找另外乙個整數 m,使得 n * m 得到的結果十進位制表示中只存在1和0兩個數字。首先看到這個題目,第一思想肯定是 使 m = 1,並依此遞增 m 的值,直到 n * m 獲得想要的效果,但是,如果 n 很大呢,那麼計算量也是很大的,所以,我們需要尋求更好的解決辦法。

書中提到的解決辦法有點複雜,這裡我介紹的方法也是非常簡單的,就是倒過來思考問題,我們用只包含1和0的數字去除 n ,如果餘數為0,那麼就找到了 m ,m 就等於那個數字除 n。

利用上面的思想解決問題不難寫出**,我們定義乙個佇列就可以了,然後從大到小把「合適」的數字放進佇列中,依次除 n 看餘數就可以了。

函式宣告如下:

/*2.8 找符合條件的整數*/

void dutfindnummakemultipleonlyhasoneorzero(int);

源**如下:

/*尋找乙個數,使得它乘以給定的數,結果中只存在1和0(十進位制表示)*/

/*書中提供了更好的解法,不過,方法確實很複雜,我就不去講解它了*/

void dutfindnummakemultipleonlyhasoneorzero(int n)

/*這裡的思想就是用只含有1和0的十進位制數去除給定的數,得到的餘數為0就停止*/

q.push(10 * t);

q.push(10 * t + 1);

}}

程式設計之美2 8 找符合條件的整數

問題 任意給定乙個正整數n,求乙個最小的正整數m m 1 使得n m的十進位制表示形式裡只含有1和0。解法 由於沒有直接的數學方法能幫我們直接得到m的值,所以我們只能進行搜尋。由於相對m,乘積n m具有明顯的特徵,需要搜尋的空間要小很多,所以我們對乘積n m進行搜尋。如果n m的結果有k位,則要迴圈...

程式設計之美2 8 找符合條件的整數

書上面講的很好,程式也寫得很巧妙。最主要的一句話 只需要將10k n的結果與餘數資訊陣列裡非空的元素相加,再去模n,看看會不會出現新的餘數。include include using namespace std vectorfind number int n bigint 1 push back 0...

程式設計之美2 8找符合條件的整數

問題 任意給定乙個正整數n,求乙個最小的正整數m m 1 使得n m的十進位制表示形式裡只含有1和0。思路 建立模n的餘數記錄表,通過動態規劃的思想找到相應的m 例子 當n 3時 record110 1000 111112 11 當j 1時,j n 1,更新record。當j 10時,j n 1存在...