輸入 a, b, c 三個整數,按升序輸出。展示三種不同思路的演算法。
if (a <= b && b <= c) printf("%d %d %d\n", a, b, c);
else if (a <= c && c <= b) printf("%d %d %d\n", a, c, b);
else if (b <= a && a <= c) printf("%d %d %d\n", b, a, c);
else if (b <= c && c <= a) printf("%d %d %d\n", b, c, a);
else if (c <= a && a <= b) printf("%d %d %d\n", c, a, b);
else /* c <= b && b <= a */ printf("%d %d %d\n", c, b, a);
if (a > b) { t = a; a = b; b = t; } // 確保 a <= b
if (a > c) { t = a; a = c; c = t; } // 確保 a 是最小
if (b > c) { t = b; b = c; c = t; } // 確保 b <= c
printf("%d %d %d\n", a, b, c);
x = a; // 最小值
if (b < x) x = b;
if (c < x) x = c;
z = a; // 最大值
if (b > z) z = b;
if (c > z) z = c;
y = a + b + c - x - z; // 中間值 = 總和 - 最小 - 最大
printf("%d %d %d\n", x, y, z);
| 指標 | 方法一 | 方法二 | 方法三 |
|---|---|---|---|
| 比較次數 | 最多 5 次 | 固定 3 次 | 固定 4 次 |
| 交換/賦值 | 無 | 最多 3 次 | 極值各 2 次 |
| 程式碼長度 | 最長 | 中等 | 最短 |
| 擴展性 | 極差 | 良好 | 差(需加總) |
| 適用類型 | 任意可比較 | 任意可比較/交換 | 數值型(支援加減) |
推薦:一般情況用方法二(平衡清晰度與效能);嚴格效能敏感且確定為整數用方法三。
輸入 n (≤30),輸出 n 層倒三角。n=5 範例:
* * * * *
* * * *
* * *
* *
*
#include <stdio.h>
int main() {
int n, t, j, k;
scanf("%d", &n);
for (t = n; t >= 1; t--) {
// 印前導空格(每層 2 字元寬度)
for (k = n - t; k > 0; k--) {
printf(" "); // 兩個空格
}
// 印星號
for (j = 2*t - 1; j >= 1; j--) {
printf("* ");
}
printf("\n");
}
return 0;
}
這兩道題目涵蓋了基礎排序邏輯與幾何圖形列印,是程式設計入門的核心訓練項目。