這裡主要是討論算法的實現,看似簡單,其實不同算法的實現思想不一樣。 假設一個很普通的例子,輸入a,b,c三個整數,按升序排列。 方法一:a,b,c兩兩比較,有6種組合,用if ...else if實現,如下: #include<stdio.h> int main(){ int a, b, c; scanf("%d%d%d", &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 if(c < = b && b <= a) printf("%d %d %d\n", c, b, a); return 0; } 方法二:覺得上面的分支太多,先a,b比較,如果a>b,則交換;再a,c比較,如果a>c,則交換;最後b,c比較,如果b>c則交換。 #include<stdio.h> int main(){ int a, b, c, t; scanf("%d%d%d",&a, &b, &c); if(a > b){t = a; a = b; b = t;} if(a > c){t = a; a = c; c = t;} if(b > c){t = b; b = c; c = t;} printf("%d %d %d\n", a, b, c); return 0; } 方法三:設定當前最小值x和最大值z,初始化值均為a,隨著比較的進行,最小值和最大值慢慢更新。變成最後的真實的最大最小值。知道最小最大值,那麼中間值y可以算出來的。 #include<stdio.h> int main(){ int a, b, c, x, y, z; scanf("%d%d%d", &a, &b, &c); //min x;max z 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); return 0; } 另外附帶一題: 輸入正整數n<=30,輸出一個n層的倒三角。例如n=5時,輸出如下: * * * * * * * * * * * * * * * * * * * * * * * * * 我的實現如下: #include <stdio.h> int main(){ int i, t, j, k; scanf("%d",&i); for(t = i; t >= 1; t--){ //先輸出2個空格字符 for(k = i - t; k > 0; k--) { printf(" "); } //後輸出"* "字符 for(j = 2*t - 1; j>=1; j--){ printf("* "); } //換行 printf("\n"); } return 0; }