郑州轻工业大学oj题解(c语言)1022:三整数排序

大家晚上好呀,这几天,有见到不少同学卡在1022这一道题目上,还有同学反复错误,找不到自己错误的点在哪的,今天这期,就跟大家聊一聊这道排序题,顺便跟大家讲一些不同的解法,希望各位都能有所收获。

  • 题目描述
    从键盘输入三个整数x,y和z,按从大到小的顺序输出它们的值。
  • 输入
    输入三个整数x,y和z。
  • 输出
    按从大到小的顺序输出它们的值。
  • 参考代码:
#include
main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if(a>b&b>c)
    printf("%d %d %d",a,b,c);
    else if(a>c&&c>b)
    printf("%d %d %d",a,c,b);
    else if(b>a&&a>c)
    printf("%d %d %d",b,a,c);
    else if(b>c&&c>a)
    printf("%d %d %d",b,c,a);
    else if(c>b&&b>a)
    printf("%d %d %d",c,b,a);
    else if(c>a&&a>b)
    printf("%d %d %d",c,a,b);
}
  • 代码解析:这是大家比较多用的一种解法,也是容易错误的解法,根据我自己以前做这道题目时的一些经验,说一下这里的易错点。
    1.条件遗漏,判断时没有把每种情况都算到位,导致答案错误。
    2.输出遗漏空格,或者每个参数的位置弄错,导致答案错误。
    其实大家在做这种判断条件比较多比较复杂的题目时,不妨可以先列一个表格出来,把要判断的条件写在纸上,在逐个输入,这样可以减少纰漏的几率。
下面再给大家介绍另一种可读性相对较强,不容易纰漏条件的解法:
#include 
int main()
{
    int x, y, z, t;
    scanf("%d %d %d", &x, &y, &z);
    if(x < y)//判断x x)
    {
        printf("%d %d %d\n", z, x, y);//这里用z和x比较,如果z>x,则z必定大于y。
    }
    else if(z > y)//这里是用else if ,在判断完z>x不成立后,则知道zy,则可得出x>z>y
         printf("%d %d %d\n", x, z, y);
    else
         printf("%d %d %d\n", x, y, z);
    return 0;
}

这种解法里,我们使用了1025题类似的解法;设置一个额外的值与这三个数进行比较。

判断顺序:

1.先判断一次x与y的大小。如果xy,则这两个值不变。让x无论如何都要大于y。(这里说的x与y只是参数)
2.判断z是否大于x,如果大于x,由于上文已经让x必定大于y,直接按序输出z,x,y即可。
3.如果z不大于x,则判断z是否小于y,如果z小于y,根据之前的判断,则可按序输出x,z,y;
4.如果z大于y,则按序输出:x,y,z;

第二种解法看似更复杂,但在判断更多整数的情况下,这种算法显然代码量会更少,也不用像第一种解法写这么多重复的代码,并且很容易出错。如果大家觉得第二种解法更适合自己的话,不妨可以用第二种解法去完成其他判断多个数值大小的题目,让自己更好的掌握这种方法。

功能同一样,算法千千万。

举一反三是学习代码最好的途径。

你可能感兴趣的:(郑州轻工业大学oj题解(c语言)1022:三整数排序)