首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

杭電 OJ 2016 經典入門題:數列最小值交換輸出 (C 語言實現)

     編輯:關於C語言

題目描述 (HDU 2016 / 數據的交換輸出)

輸入:多組測試資料,每行首個整數 n (n < 100) 後接 n 個整數。n = 0 結束。
輸出:每組找出最小值與首位元素交換後的數列,空格分隔,換行結束。
範例:
輸入:4 2 1 3 4 → 輸出:1 2 3 4
輸入:5 5 4 3 2 1 → 輸出:1 4 3 2 5

演算法邏輯

  1. 讀取 n,若 0 則退出。
  2. 讀取 n 個整數至陣列 a。
  3. 線性掃描找最小值索引 min_idx。
  4. 交換 a[0] 與 a[min_idx]。
  5. 輸出陣列,最後一個元素後無空格。

標準 C 實現

#include 

int main() {
    int n, a[100];
    while (scanf("%d", &n) == 1 && n != 0) {
        for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
        int min_idx = 0;
        for (int i = 1; i < n; ++i)
            if (a[i] < a[min_idx]) min_idx = i;
        int tmp = a[0]; a[0] = a[min_idx]; a[min_idx] = tmp;
        for (int i = 0; i < n; ++i) {
            if (i) putchar(' ');
            printf("%d", a[i]);
        }
        putchar('\n');
    }
    return 0;
}

關鍵點與避坑

  • scanf 返回值檢查:== 1 確保讀取成功,!= EOF 不足以處理格式錯誤。
  • 陣列大小 100 足夠 (n < 100)。
  • 輸出格式控制:首元素前無空格,末元素後換行。
  • 多組資料迴圈正確終止於 n == 0。

複雜度分析

  • 時間:O(n) 每組,n ≤ 99 極輕量。
  • 空間:O(1) 額外空間。

擴展變體

  1. 交換最大值至末尾:掃描最大值索引,與 a[n-1] 交換。
  2. 選擇排序雛形:重複「找最小交換至當前位置」n 次即為選擇排序。
  3. STL C++ 版:auto it = min_element(v.begin(), v.end()); swap(v[0], *it);

總結

本題考察基本輸入輸出、陣列操作、線性查找與交換邏輯,是 OJ 入門必刷題。掌握「讀取→處理→輸出」標準框架與格式控制技巧,可舉一反三解決大量同類入門題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved