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

2021-07-10 23:14:45 字數 926 閱讀 4422

問題:

任意給定乙個正整數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存在且1比10小,不更新;但(1+j)%n=2,更新record;

當j=100時,j%n=1存在且1比100小,不更新;(j+1)%n=2存在且11比101小,不更新;(j+11)%n=0,更新record;

此時發現record[0]不為空,找到n*m,返回m

**:

#include #include using namespace std;

long long findconditionnumber(long long var)

vectorrecord(var);

for (int i=0;;i++)

//update

for (int k=0;k該記錄 3.j與該記錄相加所得的餘數沒有記錄

if (record[k]!=0&&j>record[k]&&record[(record[k]+j)%var]==0)

}if (!isupdate)

//find the condition number

if (record[0]!=0)

}}int main()

{ long long v;

while (cin>>v)

{ cout<

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

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

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

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

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

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