1. 程式人生 > >ASCII碼排序【HDU - 2000】

ASCII碼排序【HDU - 2000】

ASCII碼排序問題

這題或許因為資料太少了就有點小偷懶…

題目

輸入三個字元後,按各字元的ASCII碼從小到大的順序輸出這三個字元。

Time limit Memory limit OS Source
1000 ms 32768 kB Windows C語言程式設計練習(一)

input

輸入資料有多組,每組佔一行,有三個字元組成,之間無空格。

output

對於每組輸入資料,輸出一行,字元中間用一個空格分開。

Sample

input output
qwe e q w
asd a d s
zxc c x z

問題連結:HDU - 2000

問題描述

將使用者輸入的三個字母根據ASCII碼大小進行排序,再從小到大輸出。

問題分析

使用者輸入的字母可以直接存於一個字串變數中,然後對其中元素根據ASCII碼進行排序,排序後輸出加上空格即可。

AC通過的C++語言程式碼如下:

#include
<iostream>
using namespace std; int main() { char str[3]; while (cin >> str) { char l; for (int n = 0; n < 2; n++) for (int i = 0; i < 2; i++) if (str[i] > str[i + 1]) { l = str[i]; str[
i] = str[i + 1]; str[i + 1] = l; } for (int i = 0; i < 2; i++) { cout << str[i]; cout << " "; } cout << str[2] << endl; } }

程式碼分析

此程式排序使用了一個氣泡排序的演算法(雖然只有三個資料)

//氣泡排序
char l;
        for (int n = 0; n < 2; n++)
            for (int i = 0; i < 2; i++)
                if (str[i] > str[i + 1])
                {
                    l = str[i];
                    str[i] = str[i + 1];
                    str[i + 1] = l;
                }

由於只有三個字母,所以這裡偷了個懶,沒有加入確認是否已經完成排序的演算法,而是直接執行兩趟,因為3個字母最多隻用執行兩趟氣泡排序。
關於氣泡排序詳見:經典排序演算法(1)——氣泡排序演算法詳解

最後輸出排序後的字串

for (int i = 0; i < 2; i++)
        {
            cout << str[i];
            cout << " ";
        }
        cout << str[2] << endl;

這裡為了防止PE錯誤,最後一個字母是單獨輸出的(同樣利用了只有三個字母…),以防最後一個字母后面多了一個空格導致PE錯誤。