为什么我的代码没有打印最大的数字?

时间:2019-11-18 13:17:38

标签: c++ function

#include <iostream>
void isMax(int a, int b, int c, int d) {

    int ans1, ans0, x;


    a = !b, a = !c, a = !d,
        b = !c, b = !d,
        c = !d, c = !a;

        if (a<b && b>c) { // ans0 starts 

            if (b > d) {

                std::cout << b << std::endl;
            }
            else {
                std::cout << d << std::endl;
            }
        }

        else if (a < b && b < c) {

            if (c > d) {
                std::cout << c << std::endl;
            }

            else {
                std::cout << d << std::endl;
            }
        }
        //ans1

        else if (a > b&& a > c) {
            if (a > c&& a > d) {
                std::cout << a << std::endl;
            }
            else if (a > c&& a < d) {

                std::cout << d << std::endl;
            }

            else if (a<c && c>d) {

                std::cout << c << std::endl;
            }
            else if (a < c && c < d) {
                std::cout << d << std::endl;
            }
            else {
                std::cout << "invalid numbers ahead." << std::endl;
            }

        }

        std::cout << a << b << c << d << std::endl;

};


int main() {

    isMax(3, 4, 6, 5);

    return 0;
}

在添加之前,这种方法已经起作用

a = !b, a = !c, a = !d,
       b = !c, b = !d,
       c = !d, c = !a; 

这部分,但是当我为a,b,c,d赋予相同的值时却不起作用,这就是为什么我添加了该部分,而现在却根本不起作用。

这是我的错?

此图显示了我正在尝试将其转换为代码的内容。基本上我正在尝试编写一个输出四个变量中最大的函数。

1

5 个答案:

答案 0 :(得分:2)

a != b;a不同时,

b为真。您写的是a = !b;,它是“分配给b的逻辑取反值”。

我看不到这种分配在这里如何有意义。这就是为什么在添加该分配时没有它会得到正确的结果,而却没有意义的结果。

PS:即使您通过编写a != b;来“修复”它,仅此语句也不会起作用。我想您想在某些输入相等的情况下提早返回或跳过一些较晚的条件。

答案 1 :(得分:0)

对于相当简单的东西,此代码过于复杂。如果您是编程新手,建议您尝试使用数组,这样您就可以轻松确定最大数。

例如:

void isMax(int a, int b, int c, int d) {
    int j[4] = { a,b,c,d };
    int max = j[0];
    for (int i = 1; i < 4; i++) {
        if (j[i] > max){ max = j[i]; }
    }
    cout << max;
}

这是一种更好的方法。

答案 2 :(得分:0)

我看到一些问题:

  • 您的逻辑似乎很复杂,无法打印4个最大的变量。
  • isMax函数的名称不反映其功能。
  • 如果确实打算打印最大的四个整数,我不理解“前面没有无效的数字”的必要。

我提出了一个条件较少但堆上另一个变量的简单逻辑。

#include <iostream>
int largestOf(int a, int b, int c, int d) {

  int max = a;
  if (b > max) 
    max = b;
  if (c > max) 
    max = c;
  if (d > max) 
    max = d;

  return max;
}

void isMax(int a, int b, int c, int d) {
  std::cout << largestOf(a, b, c, d) << std::endl; 
}

答案 3 :(得分:0)

目前尚不清楚您期望a = !b, ...完成什么工作,因此我将忽略它。
我也将忽略std::max的存在,因为这显然是一种练习。

您的逻辑树很有道理,但是如果您树立其他但相似的树,则可以找到更方便的解决方案。

请考虑a > b的情况,即您肯定知道b不是最大值。
现在,只看ac,而不是继续d
如果为c > d,则您知道最大值不是d,因此它必须为ac
同样,如果为d > c,则最大值为ad

对于b > a导致以下算法的情况,采用相同的推理方法:

  1. 确定max(a,b)
  2. 确定max(c,d)
  3. 所有四个数字的最大值是前两个结果的最大值。

在代码中:

void isMax(int a, int b, int c, int d) {
    int ans0 = a > b ? a : b;
    int ans1 = c > d ? c : d;
    std::cout << (ans0 > ans1 ? ans0 : ans1) << std::endl;
}

顺便说一句,名称以“ is”开头的函数通常返回布尔值,对于返回最大值的函数,您会发现比打印它的函数更多的用途。
如果要查看它,可以随时打印该值。

赞:

int max(int a, int b, int c, int d) {
    int ans0 = a > b ? a : b;
    int ans1 = c > d ? c : d;
    return ans0 > ans1 ? ans0 : ans1;
}

答案 4 :(得分:0)

在您的模式中,它应该是:

void DisplayMax(int a, int b, int c, int d) {
    if (b < a) {
        if (c < a) {
            if (d < a) {
                std::cout << a;
            } else { // a <= d
                std::cout << d;
            }
        } else { // b < a <= c
            if (c < d) {
                std::cout << d;
            } else {
                std::cout << c;
            }
        }
    } else { // a <= b
        if (c < b) {
            if (d < b) {
                std::cout << b;
            } else { // b <= d
                std::cout << d;
            }
        } else { // a <= b <= c
            if (c < d) {
                std::cout << d;
            } else {
                std::cout << c;
            }
        }
    }
}

但是,如其他答案所示,还有更简单的方法。

或带有std:

void DisplayMax(int a, int b, int c, int d) {

    std::cout << std::max({a, b, c, d});
}