#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a,b,c,t;
while(scanf("%c%c%c%*c",&a,&b,&c) !=EOF)
{
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("%c %c %c\n",a,b,c);
}
return 0;
}
调试报告:
1.还是太生疏了,漏洞百出
2.竟然忘记了加输入输出哈哈哈。。。
3.return 0 错加到最后一行
4.多处忘记加上分号
5.if 后面忘记加括号
6.将字符 %c 写成了字符串%
7.不知道 return 0 后面要加上分号
8.忘了定义变量类型
讲解:
1.依据题目要求,输入不能有空格,所以输入时加上 %*c,可以避免输出上的漏洞
2.输出时要加换行
3.看一个错解:
//ASCII码排序
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a,b,c,t,m,n;
while(scanf("%c%c%c%*c",&a,&b,&c) !=EOF){
if (a>b){
t=a;
a=b;
b=t;
}
if (b>c){
m=c;
c=b;
b=m;
}
if (a>c){
n=c;
c=a;
a=n;
}
printf("%c %c %c\n",a,b,c);
}
return 0;
}
有人可能会问,这不一样吗?我一开始也是这样认为的,我感觉调换的顺序应该没影响吧,但经过深思熟虑,恍悟起始不然!让我们分析一下:
以a b c 为例:
有六种排法,我们看 c b a 排法,经过错解排完变成 b a c,错误,为什么呢?先看第一种正确的方法:前两步扎扎实实地把 0 位置的换成了ascii 码最小的,最后一步调换后两位的顺序,由此我们可以推想如果是排四位五位也应该是从左往右一个一个地确定,而第二种错误的方法与定义的变量没有关系,只是说前两步只是把最大的确定了,最后一步还是比较 0 位和 2 位,这样一想是毫无意义的,所以第三步应该确定前两位的大小关系,改为:
//ASCII码排序
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a,b,c,t,m,n;
while(scanf("%c%c%c%*c",&a,&b,&c) !=EOF){
if (a>b){
t=a;
a=b;
b=t;
}
if (b>c){
m=c;
c=b;
b=m;
}
if (a>b){
n=b;
b=a;
a=n;
}
printf("%c %c %c\n",a,b,c);
}
return 0;
}
哈哈哈,挺开心的,我搞懂了,知其然还要知其所以然,不要浅尝辄止哦~
努力!