【问题标题】:print largest number out of 4 numbers optimize打印 4 个数字中最大的数字 优化
【发布时间】:2015-08-30 06:42:31
【问题描述】:
#include <iostream>
using namespace std;
int main()
{
    int num1,num2,num3,num4;
    int x;
    int y;
    cin>>num1>>num2>>num3>>num4;
    if (num1 > num2)

    {
         x=num1;
    }
    else
        {x = num2;
        }
    if(num3>num4)
        {y = num3;
        }
    else
    {
        y= num4;
    } 
    if (x>y)
    {cout<<"the largest number is:"<<x;

    }
    else
    {
        cout<<"the largest number is :"<<y;
    }
    return 0;
}

这是我打印 4 个数字中最大数字的代码。 问题是我被要求优化或压缩解决方案。 我试过但找不到另一种方法来编写这样的程序。任何人都可以帮助我优化解决方案并使其更好.. 忽略语法错误..

【问题讨论】:

  • 要压缩源代码,将所有 4 个值放入一个数组中。然后在 for 循环中检查当前冠军与当前元素。保留较高的那个。 4轮后离开循环并输出获胜者。你实际上可以在没有任何其他变量的情况下做到这一点。如果 (num[i]>num[0]) num[0]=num[i]。然后在循环 cout
  • 提示:使用std::vector&lt;int&gt; 存储数字并在循环中查找最大的数字。

标签: c++ optimization logic


【解决方案1】:

可以这么简单:

int max = std::max( std::max( num1, num2 ), std::max( num3, num4 ) );

【讨论】:

  • 您使用 max 作为变量名和函数调用。 C++如何区分这两个最大值?
  • @MoizSajid 函数在std 命名空间中,变量不在。
【解决方案2】:
#include<iostream>

using namespace std;

int main() {
    int x, m;
    cin >> x;
    m = x;
    for (int i = 0; i < 3; ++i) {
        cin >> x;
        m = m > x ? m : x;
    }

    cout << "The largest number is: " << m << endl;
    return 0;
}

使用循环。

【讨论】:

  • 我建议不要使用 max 作为变量名。这掩盖了许多代码读者希望看到的 STL max 函数 (en.cppreference.com/w/cpp/algorithm/max)。您仍然可以将其用作std::max,但我认为它的风格仍然很差。 +1 将 i/o 置于循环中,以便在您读取数据时即时处理数据。
  • @PeterCordes 通常我不使用using namespace std;,所以我没有考虑过
  • 即使没有using namespace std,我仍然建议不要使用maxmin 作为变量名。不过,我不确定当前的 C++ 风格指南会说什么;我通常看 C,而不是 C++。
【解决方案3】:

一种方法是将值存储在数组中并对其进行迭代:

int num[4];    
cin >> num[0] >> num[1] >> num[2] >> num[3];

int max = num[0];
for (int i = 1; i < 4; ++i) {
    if (num[i] > max) {
        max = num[i];
    }
}
cout << "The largest number is:" << max << endl;

【讨论】:

  • 如果不允许我使用数组,还有其他方法吗
  • @HassaanElahi 这是您应该在问题中提出的要求——在不告知用户他们的工具有限的情况下,他们将使用最有效的工具。
【解决方案4】:

C++11起,可以直接做

const int biggest = std::max({num1, num2, num3, num4});

【讨论】:

    【解决方案5】:

    试试这个:)) 在这种情况下我不使用标准库。只需使用如下 if-else 语句。 if(a > b) 然后返回 a else b。 其他情况下,我们可以创建一个数组并向用户请求输入。首先我们设置这个数组的第一个元素是 MAX 值。使用循环并检查。如果当前元素大于 MAX 则我们将 MAX 值更新为当前值。

    int maxOfTwoNumber(int a, int b){ return a>b? a : b; }
    int maxOfFourNumber(int a, int b, int c, int d){
        return maxOfTwoNumber(maxOfTwoNumber(a, b), maxOfTwoNumber(c, d));
    }
    

    【讨论】:

    • 为什么不使用std::max
    • 在这种情况下我不使用标准库:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多