輸入 n(n ≤ 100)個整數,按照絕對值從大到小排序後輸出。題目保證每個測試實例中,所有數的絕對值互不相等。
輸入包含多組數據,每組佔一行。每行第一個數字為 n,隨後是 n 個整數。當 n = 0 時表示輸入結束,不處理該行。
對每個測試實例,輸出排序後的結果,相鄰兩數之間用一個空格隔開,每個實例佔一行。
3 3 -4 2 4 0 1 2 -3 0
-4 3 2 -3 2 1 0
由於 n ≤ 100,數據規模極小,可直接使用簡單的排序算法(如冒泡排序、選擇排序)或標準庫 qsort。關鍵在於比較函數:按絕對值降序排列。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int cmp(const void *a, const void *b) {
int x = *(int *)a;
int y = *(int *)b;
return abs(y) - abs(x); // 絕對值降序
}
int main() {
int n, a[100];
while (scanf("%d", &n) == 1 && n) {
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
qsort(a, n, sizeof(int), cmp);
for (int i = 0; i < n; i++) {
if (i) printf(" ");
printf("%d", a[i]);
}
printf("\n");
}
return 0;
}
n ≤ 100 時極快。abs 函數需包含 stdlib.h 或 math.h。n = 0 結束,循環條件寫作 while(scanf("%d", &n) && n)。