ASCII碼排序【HDU - 2000】
阿新 • • 發佈:2018-12-07
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錯誤。