【问题标题】:Print output values in ascending order in C++在 C++ 中按升序打印输出值
【发布时间】:2021-02-16 21:51:45
【问题描述】:

我有一个任务,我有点卡在以下问题上: 从键盘读取任意 3 个随机数,然后按升序打印。

限制: /数据类型 - int /仅使用 if-else 语句

我已经针对这个问题提交了 2 个解决方案: 第一种 -> 艰难的方式,通过手动设置所有 6 种情况的 if-else 条件,并为每条语句输出一个输出,例如:

if ((A <= B) && (B <= C));
cout << A << " " << B << " " << C;
etc

第二个:使用交换函数交换值/但是,我不应该用这种方式解决它..

if ( A > B )
swap ( A,B);
if ( A > C )
swap ( A,C);
if ( B > C )
swap (B,C);
cout<< A <<" "<< B <<" "<< C;

我需要第三种解决方案,我必须满足以下条件: 再次,仅使用 if-else 语句:( 另外,在这里我可以使用辅助变量来更改变量之间的值,因此最后在“a”中具有最小值,在“b”中,在“c”中具有最大数字,并且仅显示一次数字

我确实理解这对其他人来说可能是一个非常简单的问题,我并不期待完整的答案,但如果有人能按照要求给我一个更准确的线索来解决这个问题,我将不胜感激 - 更多高效的方法????

提前致谢

【问题讨论】:

    标签: c++ sorting integer


    【解决方案1】:

    这里的基本想法是使用您的第一个解决方案,然后尝试将相同的条件组合在一起。我想你有类似的东西:

    if(A < B && B < C) cout << A << B << C;
    if(C < A && A < B) cout << C << A << B;
    

    注意条件的一部分是相同的A &lt; B。然后你可以将它们分组:

    if(A < B){
        if(B < C) cout << A << B << C;
        else if(C < A) cout << C << A << B;
    }
    

    也可以转化为:

    if(A < B){
        if(A < C) {
            if(B < C) cout << A << B << C;
        }
        else cout << C << A << B;
    }
    

    为了更容易理解下一部分。请注意我如何将else if 语句更改为仅else,并将if 子句移至上一行。


    注意:

    if(A < C && C < B) cout << A << C << B;
    

    同样遵循A &lt; B的规则,虽然没有直接显示,但是你很容易诱导出来。

    同时A &lt; B &amp;&amp; A &lt; CA &lt; C &amp;&amp; C &lt; B也共享A &lt; C的属性,所以你也可以将它们组合在一起。

    最后,你会得到这样的上半年:

    if(A < B){
        if(A < C){
            if(B < C) cout << A << B << C;
            else cout << A << C << B;
        else cout << C << A << B;
    }
    

    后半部分应该和这个很相似,但我猜这将是你的功课:D


    但是,我个人会使用你的方法 1 而不是这个,因为这样的意图和条件更清楚。

    【讨论】:

    • 谢谢 :) 这很棒,并且确实与我的第一个解决方案非常相似,但是它们要求我必须使用辅助变量,以便我可以以这样的方式更改变量之间的值最后,我必须在“a”中具有最小值,在“b”中,在“c”中具有最大数量,并且只打印一次数字,在所有语句的最后只使用一个 cout
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多