sumsum 各位數字拆分存入數組min(注意:最高位不能為 0)min 及其位數for(j=i+1; j a[j]) index = j;
導致外層循環變量 i 在內層被修改,循環邏輯完全亂套。
#include <stdio.h>
int main(void) {
int x, sum, digits[10];
int i, j, count = 0, temp, minVal = 0;
scanf("%d", &x);
sum = x + 789;
// 拆分數字到數組(個位在前)
while (sum > 0) {
digits[count++] = sum % 10;
sum /= 10;
}
// 選擇排序升序
for (i = 0; i < count - 1; i++) {
int minIdx = i;
for (j = i + 1; j < count; j++) { // 修正:j++
if (digits[j] < digits[minIdx]) minIdx = j;
}
temp = digits[i];
digits[i] = digits[minIdx];
digits[minIdx] = temp;
}
// 組成最小整數:首位非零,其餘升序
// 找到第一個非零數字作為最高位
int firstNonZero = -1;
for (i = 0; i < count; i++) {
if (digits[i] != 0) {
firstNonZero = i;
break;
}
}
if (firstNonZero == -1) { // 全為0的情況
minVal = 0;
} else {
minVal = digits[firstNonZero];
// 輸出剩餘數字(包含前面的0)
for (i = 0; i < count; i++) {
if (i != firstNonZero) {
minVal = minVal * 10 + digits[i];
}
}
}
printf("%d %d\n", minVal, count);
return 0;
}
| 輸入 | sum | 拆分數組 | 排序後 | 最小值 | 位數 |
|---|---|---|---|---|---|
| 123 | 912 | [2,1,9] | [1,2,9] | 129 | 3 |
| 1000 | 1789 | [9,8,7,1] | [1,7,8,9] | 1789 | 4 |
| 0 | 789 | [9,8,7] | [7,8,9] | 789 | 3 |