# 程式設計練習 [TOC] --- ## 哥德巴赫猜想 **敘述** 哥德巴赫猜想(Goldbach's conjecture)是數論中存在最久的未解問題之一。這個猜想最早出現在1742年普魯士數學家克里斯蒂安·哥德巴赫與瑞士數學家萊昂哈德·歐拉的通信中。用現代的數學語言,哥德巴赫猜想可以陳述為:任一大於2的偶數,都可表示成兩個質數之和。 **Input** 輸入一整數n,範圍為0 ≤ n ≤ 10000 **Output** 當n為大於2的偶數,則輸出兩個質數,第一個質數為滿足哥德巴赫猜想之最小質數。如果為奇數或n=2,則輸出 “No answer!”。如果n超過範圍,則輸出 “Out of scope!”。 **範例** ![](https://i.imgur.com/G7m8yjE.png) **程式碼連結(Online C compiler):**[哥德巴赫猜想](https://onlinegdb.com/Xg0SpaQH2) --- ## 反轉質數 **敘述** 一個大於 1 的整數被稱為質數,如果它的唯一正除數(因數)是 1 和它自己。多年來,許多數學家一直在研究素數。質數的應用出現在密碼學和編碼理論等領域。您是否嘗試過反轉質數?對於大多數質數,你得到一個複合(43 變成 34)。 Emirp(Prime 拼寫向後)是一個 Prime,當它的數字反轉時,它會給你一個不同的 Prime。例如,17 是 Emirp,因為 17 和 71 都是 Prime。在這個問題中,你必須決定一個數 N 是非質數還是質數或 Emirp。假設 1< N < 1000000。 **Input** 輸入由幾行指定 N 的值組成。 當 N = 0 時編譯器結束。 **Output** 對於輸入中給定的每個 N,輸出應包含以下內容之一: 1. “N 不是質數。”,如果 N 不是質數。 2. “N 是質數。”,如果 N 是質數且 N 不是 Emirp。 3. ‘N 是 emirp.’,如果 N 是 Emirp。 **範例** ![](https://i.imgur.com/236NwiJ.png) **程式碼連結(Online C compiler):**[反轉質數](https://onlinegdb.com/fy4KXaNWq) --- ## 整除問題 **運用概念** sqrt(開根號)-> 標頭檔#include<math.h> **敘述** 數學家喜歡數字的各種奇數性質。例如,他們認為 945 是一個有趣的數字,因為它是第一個其除數之和大於數字本身的奇數。為了幫助他們搜索有趣的數字,您將編寫一個程序來掃描一個數字範圍並確定該範圍內除數最多的數字。不幸的是,數字的大小和範圍的大小使得過於簡單的方法可能需要太多時間來運行。因此,請確保您的算法足夠聰明,可以在幾秒鐘內處理盡可能大的範圍。 **Input** 輸入的第一行指定範圍的數量 N,接下來的 N 行中的每一行都包含一個範圍,由下限 L 和上限 U 組成,其中 L 和 U 都包含在範圍內。 **Output** 對於每個範圍,找到除數最多的數字 P(如果多個數字並列第一位,則選擇最小的),以及 P 的正除數 D 的數量(其中 P 作為除數包括在內)。打印文本“Between L and U, P has a maximum of D divisors.”,其中 L、U、P 和 D 是上面定義的數字。 **範例** ![](https://i.imgur.com/cGqZOwt.png) **程式碼鏈結(Online C compiler):**[整除問題](https://onlinegdb.com/l3xJ17R58) --- ## 算數、最大值與最小值(課本 2.19) **敘述** 計算總和、平均、乘積、最大值、最小值 **Input** 輸入三個不同的整數 **Output** 輸出以下畫面 ![](https://i.imgur.com/iCtg2EX.png) **程式碼連結(Online C compiler):**[算數、最大值與最小值](https://onlinegdb.com/wYN08cKXsv) --- ## 分開整數的個別數字(課本 2.30) **敘述** 將數字分成個別數字 **Input** 輸入一個五位數的數字 **Output** 分別輸出五個數字 **範例** 範例輸入:42139 範例輸出:4 2 1 3 9 **程式碼連結(Online C compiler):**[分開整數的個別數字](https://onlinegdb.com/5I4eaRubv5) --- ## 薪資計算工具(課本 3.20) **敘述** 計算每位員工的薪資所得。這家公司對員工美中工作前40小時以內以『正常薪資』計算薪資,超過40小時的部分則以『正常工資的1.5倍』計算。 **Input** 連續輸入工作時數(小時)和每小時時薪。如果工作時數為“-1”時,結束執行 **Output** 輸出員工當月薪資 **範例** **程式碼連結(Online C compiler):**[薪資計算工具](https://onlinegdb.com/wvp3LxQwqR) --- ## 檢查數字是否為質數(課本 3.22) **敘述** 質數是大於1的任何自然數,只能由1和數字本身整除 **Input** 輸入整數n,判斷數值是否為質數,當n=0時,結束執行程式 **Output** 輸出是否為質數 **範例** 範例輸入1:13 範例輸出1:質數 範例輸入2:4 範例輸出2:非質數 **程式碼連結(Online C compiler):**[檢查數字是否為質數](https://onlinegdb.com/O6rJiEM6v) --- ## 找出最大數(課本 3.23) **敘述** 連續輸入數值並找出其最大值 **Input** 連續輸入10個非負整數 **Output** 輸出最大值 **提示** **counter**:數到10的計數器(記錄已輸入多少個數值,並且判斷是否已完成輸入10個數值) **number**:目前輸入到程式的值 **largest**:到目前為止的最大值 **範例** 範例輸入:1 2 3 4 5 6 7 8 9 10 範例輸出:10 **程式碼連結(Online C compiler):**[找出最大數](https://onlinegdb.com/3tXt5OwM7) --- ## 阿姆斯壯數(課本 3.36) **敘述** 阿姆斯壯數是一個n位數,其個位數字的的n次方和等於該數本身,例如:數字153等於1^3^+ 5^3^+3^3^,因此他是阿姆斯壯數。編寫一個顯示所有三位數阿姆斯壯數 **Input** (不需輸入) **Output** 153 370 371 407 **程式碼連結(Online C compiler):**[阿姆斯壯數](https://onlinegdb.com/PwynjTatg) --- ## 計算9的個數(課本 3.38) **敘述** 輸入一個五位數以下的整數,判斷並印出此數中有多少個數字為9 **Input** 連續輸入整數(五位數以下),當輸入0時,結束執行程式 **Output** 輸出整數中9的個數 **範例** 範例輸入:9789 範例輸出:2 **程式碼連結(Online C compiler):**[計算9的個數](https://onlinegdb.com/DdvAmDpfo) --- ## 計算倍數的和(課本 4.11) **敘述** 計算及印出1到100之間的所有7的倍數之和 **Input** (無需輸入) **Output** 735 **程式碼連結(Online C compiler):**[計算倍數的和](https://onlinegdb.com/ECgrplHY7) --- ## 尋找質數(課本 4.12) **敘述** 計算並印出1到100間的所有質數 **Input** (無需輸入) **Output** 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 **程式碼連結(Online C compiler):**[尋找質數](https://onlinegdb.com/VRvR8C4ivo) ___ ## 自然數計算(課本4.13) **敘述** 印出從1到使用者輸入之任何數字之間的所有自然數的總和、平方和立方 **Input** 輸入一數值,計算一到此區間的總和、平方和立方 **Output** 輸出區間的總和、平方和立方 **範例** 範例輸入: 10 範例輸出: 總和:55 平方和:385 立方和:3025 **程式碼連結(Online C compiler):**[自然數計算](https://onlinegdb.com/gc0rX_ZAfH) --- ## 計算銷售額(課本 4.19) **敘述** 商家販售五樣商品,售價如下圖: |產品編號 | 零售價 | | -------- | -------- | | 1 | 2.98 | | 2 | 4.50 | | 3 | 9.98 | | 4 | 4.49 | | 5 | 6.87 | **Input** 輸入產品編號、當日銷售量 **Output** 輸出該產品當日的銷售額 **範例** 範例輸入: 3 100 範例輸出: 998 **程式碼連結(Online C compiler):**[計算銷售額](https://onlinegdb.com/NALqlIwXT5) --- ## 畢式三元素(課本 4.27) **敘述** 直角三角形的三邊可 以都是整數。構成直角三角形邊長的三個整數稱爲畢氏三元 數。這三個邊必須滿足以下公式:斜邊的本方等於另外兩邊的本方和。尋找斜邊不大於 500 的所 有畢氏三元數的 side1 和 side2。使用一個三層的巢狀for 迴圈來嘗試所有的可能性。這種計 算方式就稱爲「暴力法」。許多人認爲這不是一個好方法。但是從許多層面來看,這仍是很重要的 技巧。首先,電腦的威力以驚人的速度增加,幾年前的電腦需要好幾年或好幾世紀才能算出的問 題,現在可能只花幾個小時、幾分鐘,甚至幾秒鐘之內就能算出來。現今的微處理器晶片可以在 一秒之內處理十億個指分。其次,在你將來的資訊科學課程中,你會發現還有許多有趣的問題设 有演算法可以解決,只能使用窮舉暴力法 。我們在本書中介紹了許多解決問題的方法。我們會在 許多有趣的問題上使用暴力法。 **Input** (無需輸入) **Output** 3 4 4 3 5 12 6 8 8 6 8 15 9 12 12 5 12 9 12 16 15 8 15 20 16 12 20 15 20 21 21 20 . . . 483 44 **程式碼連結(Online C compiler):**[畢氏三元素](https://onlinegdb.com/FY4QXSFRS) --- ## 印出菱形 ### 印出菱形(課本 4.31) **敘述** 印出菱形圖形,只能使用printf敘述式印出一個空格和一個星號。 請盡量加大循環次數(使用雙重迴圈),並盡量減少printf。 **Input** 輸入菱形最大邊長n **Output** 當n為基數時,輸出菱形圖形。若為偶數,則結束執行 **範例** 範例輸入:9 範例輸出: ``` * *** ***** ******* ********* ******* ***** *** * ``` **程式碼連結(Online C compiler):** 1.[印出菱形(方法一)](https://onlinegdb.com/ozNY_PG-4y) 2.[印出菱形(方法二)](https://onlinegdb.com/vHe2GzJ2O) --- ### 印出空心菱形 延伸 **Input** 輸入菱形最大邊長n **Output** 當n為基數時,輸出空心菱形圖形。若為偶數,則結束執行 **範例** 範例輸入:9 範例輸出: ``` * * * * * * * * * * * * * * * * ``` **程式碼連結(Online C compiler):**[印出空心菱形 延伸](https://onlinegdb.com/3S75Q-bVf) ---