#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赋予相同的值时却不起作用,这就是为什么我添加了该部分,而现在却根本不起作用。
这是我的错?
此图显示了我正在尝试将其转换为代码的内容。基本上我正在尝试编写一个输出四个变量中最大的函数。
答案 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)
我看到一些问题:
我提出了一个条件较少但堆上另一个变量的简单逻辑。
#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
不是最大值。
现在,只看a
和c
,而不是继续d
。
如果为c > d
,则您知道最大值不是d
,因此它必须为a
或c
。
同样,如果为d > c
,则最大值为a
或d
。
对于b > a
导致以下算法的情况,采用相同的推理方法:
max(a,b)
。max(c,d)
。在代码中:
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});
}