輸入多組數據,每組第一個數 n (1≤n≤20) 後跟 n 個正整數。按各位數字之和升序排序,輸出排序結果。n=0 結束輸入。
int get_digit_sum(int num) {
int sum = 0;
while (num) {
sum += num % 10;
num /= 10;
}
return sum;
}
使用簡單選擇排序(或冒泡),比較時調用 get_digit_sum()。因 n≤20,O(n²) 完全足夠。若數位和相等,題目未規定穩定性,保持原序或任意序均可。
#include <stdio.h>
int get_digit_sum(int num);
int main() {
int i, j, n, a[21], temp;
while (1) {
scanf("%d", &n);
if (n == 0) break;
for (i = 0; i < n; i++) scanf("%d", &a[i]);
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (get_digit_sum(a[i]) > get_digit_sum(a[j])) {
temp = a[i]; a[i] = a[j]; a[j] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%d", a[i]);
if (i < n-1) printf(" ");
}
printf("\n");
}
return 0;
}
int get_digit_sum(int num) {
int sum = 0;
while (num) {
sum += num % 10;
num /= 10;
}
return sum;
}
輸入:
2 1 2 3 121 10 111 0
輸出:
1 2 10 111 121
解析:121數位和=4,10數位和=1,111數位和=3 → 排序後 10, 111, 121。