首页 > 解决方案 > 使用 if 语句对 3 个数字进行排序

问题描述

我很抱歉我的英语不好,我会尽力让你理解我:) 我正在从 Stroustrup 的书中学习 C++,我正在尝试使用 if 语句对 3 个数字进行排序来做这个练习。我认为我在编写这段代码方面做得很好,至少我是这么认为的。我在纸上做了一些计算,所以我可以更好地理解它,我想出了这个代码:

#include <iostream>

int main()
{
    int val1;
    int val2;
    int val3;

    std::cout << "Please enter the 1st number: ";
    std::cin >> val1;
    std::cout << "Please enter the 2nd number: ";
    std::cin >> val2;
    std::cout << "Please enter the 3rd number: ";
    std::cin >> val3;

    if (val1 > val2)
    {
        if (val2 > val3)
        {   
            std::cout <<  val3 << ' '  << val2 << ' ' << val1;
        }
        else
        {
            if (val1 > val3)
                std::cout << val2 << ' ' << val3 << ' ' << val1;
            else
                std::cout << val2 << ' ' << val1 << ' ' << val3;
        }
    }
    else
    {
        if (val2 > val3)
        {
            if (val3 > val1) std::cout << val1 << val3 << val2;
            else std::cout << val3 << val1 << val2;
        }
        else
        {
            std::cout << val1 << val2 << val3;
        }


    } 

我的问题是:我能做些什么来改进这段代码吗?我已经尝试了几乎所有我能做的事情,但是我不能让它有更少的 if 语句,我不知道这是否是我能通过这个练习得到的最少的如果,请帮助我:)

标签: c++

解决方案


这是一个简单的方法,它以类似“冒泡排序”的方式工作

#include <utility>
#include <iostream>

int main() {
    int a, b, c;
    a = 5; b = 3; c = 4;
    if ( a > b ) std::swap( a, b );
    if ( b > c ) std::swap( b, c );
    if ( a > b ) std::swap( a, b );

    std::cout << a << ", " << b << ", " << c << std::endl;
}

推荐阅读