ASCII码排序
题目描述
Problem Description
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
Sample Input
qwe
asd
zxc
Sample Output
e q w
a d s
c x z
题目理解
通过题目我们可知,本题是要求我们根据ASCII码对我们输入的字符进行比较,通过ASCII码的大小将字符按从小到大的顺序输出。
本题要求每3个字符进行比较,因此可以有两种方法解决
第一种方式–if判断
比较字符只有三个数,我们可以通过if判断语句直接对3个字符进行判断。
输入三个字符,先将前两个数据进行比较,当前一个字符的ASCII码值大于后一个字符时,我们可以将两个字符通过第三方字符进行交换。两个字符交换后,再重复对后两个字符进行大小判断、交换。此时,已经将最后一个字符交换成为最大的字符了,再将前两个字符进行比较、交换,就将全部字符按照从小到大的顺序排列。
第二种方式–数组排列
第二种方式在只有三个数据这样小数量的排列其实不太适用,本次采用选择排列的方式进行解决,具体选择排列的讲解请参考选择排列讲解
两种方式主要的区别在于第一种方式采用的是字符输入,而第二种方式则是采用了字符数组输入,两者其实大同小异。
源代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a,b,c,d;
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
{
if(a>b)
{
d=a;
a=b;
b=d;
}
if(b>c)
{
d=c;
c=b;
b=d;
}
if(a>b)
{
d=a;
a=b;
b=d;
}
printf("%c %c %c\n",a,b,c);
getchar();
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a,b,c,d;
char arr[3];
while(scanf("%s",arr)!=EOF)
{
for (int i = 0; i < 3-1; i++)
{
int minIndex = i;
for (int j = i+1; j<3; j++)
{
if(arr[i]>arr[j])
{
minIndex = j;
}
}
if(minIndex != i)
{
arr[i] = arr[i]^arr[minIndex];
arr[minIndex] = arr[i]^arr[minIndex];
arr[i] = arr[i]^arr[minIndex];
}
}
printf("%c %c %c\n",arr[0],arr[1],arr[2]);
}
return 0;
}