c++**如下:
#include #include #include using namespace std;
int main(void)
int hit = 0, hit1 = -1, hit2 = -1;
for (__int64 i = 1; i < int64_max; ++i)
// if
else if (hit == 2)
//else if
else
// else
}//end if
}// end for
// ! 注意這裡if語句的位置
if (hit == 2 && hit1 + 1 == hit2)
//end if
}// end for
return 0;
}
問題1:
這個程式要找的是符合什麼條件的數?
問題2:這樣的數存在麼?符合這一條件的最小的數是什麼?
問題3:
在電腦上執行這一程式,你估計要多長時間才能輸出第乙個結果?時間精確到分鐘(電腦配置:單核cpu2.0ghz,記憶體和硬碟資源充足)
---------------------------分割線 個人一些想法----------------------------
注意一下if語句的位置,剛開始看題時以為if語句在內層for迴圈裡面,結果就理解錯了,錯了,了~
仔細分析一下,程式的目的是找出乙個數,這個數滿足以下性質:
不能被rg陣列內的某兩個連續數整除,但是能被陣列內的其他數整除。
[假設rg陣列的元素個數為n 這裡 n = 30]
即等價為:<=>
找乙個num 滿足 num % rg[i] == 0 && num % rg[i + 1] == 0 && num % rg[j] != 0 【0≤i
碰到這種取餘的運算,條件反射想到 最小公倍數 最大公約數等等。
恩 但這道題沒有那麼容易。
首先num僅且只能不被兩個rg陣列內的數整除。 (rg陣列內數的範圍是2~31)
假設不能被整除的第乙個數為rg[i] 第二個即為rg[i + 1]
很顯然 15是乙個分界線 比如 30 = 2 * 15 那麼rg[i] ≤ 15 很明顯不行 至少不能被三個數整除。。(想想看 是不是這樣)
接下來考慮的就是陣列內元素之間的因子轉換了 【記得找 大於15的數】
16 = 2 * 8
18 = 2 * 9
20 = 4 * 5
21 = 3 * 7
22 = 2 * 11
24 = 3 * 8
30 = 2 * 15
分析一下:
上面列出的一些因子乘式中 兩個因子看似沒有很大關係 似乎找不到要找的數。
如果num能整除兩個因子 那麼必然num肯定能整除它們的乘積(再次想想看 是不是這樣)
因此 這樣好像就是找不到了。。找不到。。找不到?!
-------------到底錯在哪----------------
好吧 其實我們沒有考慮兩個因子之間的關係 什麼關係呢~
----------萬一兩個因子之間是可以整除的!!!---------
上面滿足這一條件的是 16 = 2 * 8 其中因子2可以整除因子8。
因此 rg[i] = 16 rg[i + 1] = 17
問題轉化為 : 找不能被16和17整除 但能被其他數整數整除的數。
接下來找最小的那個。。
任何乙個非素數都可以寫成 2^k1 * 3^k2 * 5^k3的形式。(k1 k2 k3 ≥ 0)
要想整除16和17外所有的數 這個數至少滿足:
整除8
整除27
整除25
整除其餘的素數(除 2 3 5 17外)
即:2^3 * 3^3 * 5^2 * 7 * 11 * 13 * 19 * 23 * 29 * 31 ===>2123581660200
參考網路上答案的解釋~感謝
【程式設計之美】2.20程式理解和時間分析 -- 匡子語
再次感嘆
數學之美~
程式設計之美~
程式設計之美 2 20 程式理解和時間分析
最近在看 程式設計之美 為找工作面試做準備。該書中2.20程式理解和時間分析一題沒有給出解答,所以簡單寫一下我自己的答案。題目如下 閱讀以下c 回答問題 csharp view plain copy using system using system.collections.generic usin...
程式設計之美讀書筆記2 20 程式理解和時間分析
1 理解這個程式就是從輸出的地方入手即可。這個程式輸出的條件是hit 2 hit1 1 hit2 而hit表示滿足i r j 0的條件的次數,hit 2表示這個條件只能被滿足兩次,也就是說對於乙個i,在rg陣列的30個數中,這個i能被其它28個數整除,而不能被其中兩個數整除。而hit1表示第乙個不能...
程式理解和時間分析
程式設計之美 第2.20節 程式理解和時間分析 題目如下 閱讀以下c 回答問題 cpp view plain copy using system using system.collections.generic using system.text namespace findthenumber fo...