輸入多組測資,每組第一個數 n (n≤100) 後接 n 個整數。依絕對值從大到小排序輸出,題目保證絕對值互不相同。n=0 結束輸入。
輸入: 3 3 -4 2 4 0 1 2 -3 0 輸出: -4 3 2 -3 2 1 0
n,若為 0 則結束。n 個整數存入陣列。qsort,或簡單選擇排序(n≤100,O(n²) 完全足夠)。|a| > |b| 則 a 排前面。#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int cmp(const void *a, const void *b) {
int x = *(const int*)a;
int y = *(const int*)b;
int ax = abs(x), ay = abs(y);
return (ax > ay) ? -1 : (ax < ay) ? 1 : 0; // 絕對值由大到小
}
int main() {
int n, a[100];
while (scanf("%d", &n) == 1 && n) {
for (int i=0;i
手寫選擇排序版本(無需標準庫)
#include <stdio.h>
#include <math.h>
int main() {
int n, a[100];
while (scanf("%d", &n) == 1 && n) {
for (int i=0;i abs(a[max_idx])) max_idx = j;
if (max_idx != i) {
int tmp = a[i]; a[i] = a[max_idx]; a[max_idx] = tmp;
}
}
for (int i=0;i
注意事項
abs() 需包含 <stdlib.h> 或 <math.h>,注意 abs(INT_MIN) 未定義行為,但題目數值範圍通常安全。
- 輸入可能跨行,
scanf 自動處理空白。
- 絕對值互不相同,故不需處理相等時的穩定性。