【例 2.1】求 1 × 2 × 3 × 4 × 5 。
可以用最原始的方法進行:
步驟 1: 先求 1 乘以 2,得到結果 2 。
步驟 2: 將步驟 1 得到的乘積 2 再乘以 3,得到結果 6 。
步驟 3: 將 6 再乘以 4,得 24 。
步驟 4: 將 24 再乘以 5,得 120 。這就是最後的結果
這樣的演算法雖然是正確的,但太繁瑣。
我們不妨改進一下:
s1: 令 p = 1,或寫成 1 => p (表示將 1 存放在變數 p 中)
s2: 令 i = 2,或寫成 2 => i (表示將 2 存放在變數 i 中)
s3: 使 p 與 i 相乘,乘積仍放在變數 p 中,可表示為: p * i => p
s4: 使 i 的值加 1,即 i + 1 => i
s5: 如果 i 不大於 5,返回重新執行 s3 及其後的步驟 s4 和 s5;否則,演算法結束。最後得到 p 的值就是 5! 的值。
顯然,這個演算法比前面列出的演算法簡練。
如果題目改為:求 1 × 2 × 3 × 4 × 5 。演算法只須做很少的改動:
s1: 1 => p
s2: 3 => i
s3: p * i => p
s4: i + 2 => i
s5: 若 i ≤ 11,返回 s3;否則,結束。
可以看出用這種方法表示的演算法具有一般性、通用性和靈活性。
【例 2.2】有 50 個學生,要求輸出成績在 80 分以上的學生的學號和成績。
為了描述方便,不妨設:
n:表示學生學號
g:表示學生的成績
i :表示第幾個學生
演算法步驟:
s1: 1 => i
s2: 如果 gi ≥ 80,則輸出 ni 和 gi,否則不輸出
s3: i + 1 => i
s4: 如果 i ≤ 50,返回到 s2,繼續執行,否則,演算法結束
【例 2.3】判定2000—2023年中的每一年是否為閏年,並將結果輸出。
先分析閏年的條件:
能被 4 整除,但不能被 100 整除的年份都是閏年。
能被 400 整除的年份是閏年。
設 year 為被檢測的年份。演算法可表示如下:
s1: 2000 => year
s2: 若 year 不能被 4 整除,則輸出 year 的值和 「不是閏年」。然後轉到 s6,檢查下乙個年份
s3: 若 year 能被 4 整除,不能被 100 整除,則輸出 yea r的值和 「是閏年」。然後轉到 s6
s4: 若 year 能被 400 整除,輸出 year 的值和 「是閏年」 ,然後轉到 s6
s5: 輸出 year 的值和 「不是閏年」
s6: year + 1 => year
s7: 當 year ≤ 2500 時,轉 s2 繼續執行,否則演算法停止
【例 2.4】求 1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 。
解題思路:表面看,每一項都不一樣,但稍加分析,就可以看到:
第 1 項的分子分母都是 1,即 1/1;
第 2 項的分母是 2,以後每一項的分母都是前一項的分母加 1;
第 2 項前的運算子為 " - ",後一項前面的運算子都與前一項前的運算子相反。
這就找到了多項式的規律,能把多項式表示為一般形式,即把問題抽象化了。
sign:表示當前項的數值符號
term:表示當前項的值
sum:表示當前項的累加和
deno:表示當前項的分母
演算法步驟:
s1: sign = 1
s2: sum = 1
s3: deno = 2
s4: sign = (-1) * sign
s5: term = sign * (1/deno)
s6: sum = sum + term
s7: deno = deno + 1
s8: 若 deno ≤ 100 返回 s4;否則演算法結束
【例 2.5】給出乙個大於或等於 3 的正整數,判斷它是不是乙個素數。
解題思路:所謂素數,是指除了 1 和該數本身之外,不能被其他任何整數整除的數。例如, 13 是素數,因為它不能被 2,3,4,… ,12 整除。
演算法步驟:
s1: 輸入 n 的值
s2: i = 2(i作為除數)
s3: n 被 i 除,得餘數 r
s4: 如果 r = 0,表示 n 能被i整除,則輸出 n 「不是素數」,演算法結束;否則執行 s5
s5: i + 1 => i
s6: 如果 i ≤ n - 1,返回 s3;否則輸出 n 的值以及「是素數」,然後結束
第 2 章 演算法
演算法 是解決待定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。指演算法在執行有限的步驟後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。演算法的每一步驟都具有確定的含義,不會出現二義性。演算法的每一步都必須是可行的,也就是說,每一步都能夠通過...
第2章 演算法分析
知識點 2.1 數學基礎 法則1 如果t1 n o f n 且t2 n o g n 那麼 a t1 n t2 n o f n g n 或者t1 n t2 n o max f n g n b t1 n t2 n o f n g n 法則2 如果t n 是乙個k次多項式,則t n n k 法則3 對於任...
第2章 演算法分析
最大子串行和問題的求解 演算法1 時間複雜度為o n 3 1 public static int maxsubsum1 int a 21617 return maxsum 18 演算法2 時間複雜度為o n 2 1 public static int maxsubsum2 int a 216 171...