回覆列表
-
1 # 使用者1852147582490
相關內容
- c語言程式設計,假設x是一個整數,寫一個程式:從鍵盤上輸入它的值,計算y=2x+5,並輸出y的值?
- 毫無程式設計基礎的小白準備學習C語言,如何安裝VS?
- 求c語言程式設計輸出200以內的素數?
- c語言程式設計求輸入兩個數的最大公約數和最小公倍數,怎麼做?
- C語言:輸入10個整數,將其中最小的數於第一個數對換,把最大的數與最後一個數對換。寫3個函式:()?
- C語言程式設計適合用於哪些系統或軟體的設計上?
- c語言程式設計的平臺是什麼?
- 輸入三個整數,比較三個數大小並按從小到大的順序排列。python程式碼怎麼寫?高手請指導,謝謝?
- C語言中怎麼弄輸入一個人的名字然後輸出我愛你?
- C語言,輸入半徑,求圓的面積和周長?
我來給你說個思路吧,不會給你寫程式碼的,最多是虛擬碼……
首先你需要一個能夠找到在給定區域內所有完全平方數的函式,不妨稱之為
int* find_squres(int a, int b) {…}
沒錯,它返回一個數組的指標指向a到b之間第一個也是最小一個完全平均數,長度為找到的完全平方數如果沒有,可以返回空指標。如果在函式外不能立即知道該陣列長度,你可以把第一位也就是第0位用來記錄找到的完全平方數個數,如果找不到就返回一個長度為1的陣列,這個位置存個0。
這個函式可能對於a b相距較遠的情況會很費時,所以有必要在本地維護一個檔案用以儲存找到的完全平方數。這個檔案規範如下,記錄從1開始,一直到一個大整數N,所有記錄的數全部是順序的完全平均數,不要漏!
我們寫一個叫做
square_decompose(int M)
的函式用來完成指定任務,演算法從這裡正式開始!
在square_decompose中,開啟那個檔案,把檔案中所有的完全平方數用一個數組X存下來
1. 對於每一個輸入的整數M,比較X中最大的N。
2. 如果N小,則呼叫 find_squares( N , M ),將找到的結果全部append到X裡去。
3. 在X裡從最大值往下尋找第一個比M小的整數,N_1,記錄 M_1 = M-N_1,並把N_1記錄下來(記錄方法太多了,比如記錄在檔案裡,列印在終端,或者和其他返回值一起合併成一個數組返回)
4. 若M_1大於零,遞迴呼叫 square_decompose(M_1);若等於零,把X存入檔案,不要append,並退出。
這樣做是非常快的演算法了……速度提升的訣竅在於維護了一張完全平方數表,如果可以提升尋找完全平方數演算法的話,還能更快!