首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C語言數組排序題目:輸入正整數加789後拆分排序組成最小整數

     編輯:程式設計綜合問答

題目需求

  1. 輸入正整數(≤5位),計算與 789 之和 sum
  2. 將 sum 各位數字拆分存入數組
  3. 數組升序排序
  4. 排序後數組組成最小整數 min(注意:最高位不能為 0)
  5. 輸出 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;
}

關鍵點解析

  1. 排序算法:選擇排序、冒泡排序均可,注意循環變量不衝突
  2. 最小整數構造:最高位必須取最小非零數字,其餘按升序(含0)
  3. 邊界情況:輸入 0 時 sum=789,拆分為 9,8,7,排序後 7,8,9,最小值 789

測試用例

輸入sum拆分數組排序後最小值位數
123912[2,1,9][1,2,9]1293
10001789[9,8,7,1][1,7,8,9]17894
0789[9,8,7][7,8,9]7893
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved