藍橋杯ACM簡單題-交換瓶子 2020-12-22

Emmett-Brown發表於2020-12-22

藍橋杯ACM簡單題-交換瓶子

1.問題描述
  有N個瓶子,編號 1 ~ N,放在架子上,要求每次拿起2個瓶子,交換它們的位置,依照大小排序。
2.演算法分析
  現任這是排序問題,在此使用尋找排序法
3.輸入
請輸入要排序瓶子的個數:3
請輸入您的數,且用空格或回車隔開每個數: 532 545 123
4輸出
123 532 545
程式碼

#include <stdio.h>
int main()
{
    int n, i, max, save, flag, nsave;
    printf("請輸入要排序瓶子的個數:");
    n = (getchar() - '0');
    //printf("%d",n);
    int a[n];
    printf("請輸入您的數,且用空格或回車隔開每個數:");
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if (a[i] == ' ' || a[i] == '\n')
        {
            continue;
        }
    }
    for (nsave = n; nsave > 0; nsave--)
    {
        max = a[nsave - 1];
        flag = nsave - 1;
        for (i = 0; i < nsave; i++)
        {
            if (a[i] > max)
            {
                max = a[i];
                flag = i;
            }
        }
        save = a[flag];
        a[flag] = a[nsave - 1];
        a[nsave - 1] = save;
    }
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
}