C++ STD :: MAX像STD :: Min

发布于 2025-02-09 13:33:37 字数 1885 浏览 2 评论 0原文

注意:这是针对问题的 teleportation> teleportation 来自usaco.org(from usaco.org)奇怪的变量名称,显然我不是

在尝试使用内置的最大值(2,8)时,而出于某种原因,我得到了2个。我还创建了这样的功能:

#define min(number_1, number_2) (number_1 < number_2 ? number_1 : number_2)
#define max(number_1, number_2) (number_1 < number_2 ? number_2 : number_1)

但是它仍然失败。这是代码:

#include <iostream>
#include <string>

using namespace std;

#define min(number_1, number_2) (number_1 < number_2 ? number_1 : number_2)
#define max(number_1, number_2) (number_1 < number_2 ? number_2 : number_1)

int main() {
    int start_position, end_position;
    int teleportation_start_position, teleportation_end_position;

    cin >> start_position >> end_position >> teleportation_start_position >> teleportation_end_position;
    cout << start_position << " " << end_position << " " << teleportation_start_position << " " << teleportation_end_position << "\n";

    start_position = min(start_position, end_position);
    end_position = max(start_position, end_position);

    teleportation_start_position = min(teleportation_start_position, teleportation_end_position);
    teleportation_end_position = max(teleportation_start_position, teleportation_end_position);

    cout << start_position << " " << end_position << " " << teleportation_start_position << " " << teleportation_end_position << "\n";
}

我得到的输入

3 10 8 2

我明白了

3 10 8 2
3 10 2 2

为什么是2 2?

当我删除定义的内容(#define)时,它仍然不起作用。 我只插入了代码段。

注意#2:我是新手的C ++,主要是Pythonic习惯。

注意#3:不良习惯是因为这是竞争性的编程。

Note: This is for the problem teleportation from usaco.org (hence the strange variable names, I'm obviously not making an actual teleporter)

When I try using the built-in max for (2, 8), and I get 2 for some reason. I also created my own functions like this:

#define min(number_1, number_2) (number_1 < number_2 ? number_1 : number_2)
#define max(number_1, number_2) (number_1 < number_2 ? number_2 : number_1)

but it still fails. Here is the code:

#include <iostream>
#include <string>

using namespace std;

#define min(number_1, number_2) (number_1 < number_2 ? number_1 : number_2)
#define max(number_1, number_2) (number_1 < number_2 ? number_2 : number_1)

int main() {
    int start_position, end_position;
    int teleportation_start_position, teleportation_end_position;

    cin >> start_position >> end_position >> teleportation_start_position >> teleportation_end_position;
    cout << start_position << " " << end_position << " " << teleportation_start_position << " " << teleportation_end_position << "\n";

    start_position = min(start_position, end_position);
    end_position = max(start_position, end_position);

    teleportation_start_position = min(teleportation_start_position, teleportation_end_position);
    teleportation_end_position = max(teleportation_start_position, teleportation_end_position);

    cout << start_position << " " << end_position << " " << teleportation_start_position << " " << teleportation_end_position << "\n";
}

And I get with the input of

3 10 8 2

I get

3 10 8 2
3 10 2 2

Why is it 2 2?

It still doesn't work when I delete the things I defined (#define).
I only inserted a code snippet.

Note #2: I'm new to c++ with mostly pythonic habits.

Note #3: The bad habits are because this is competitive programming.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海未深 2025-02-16 13:33:37

错误是您正在重复使用teleportation_start_position变量。

teleportation_start_position = min(teleportation_start_position, teleportation_end_position);

在此行之前,程序的状态为:

  • teleportation_start_position = 8
  • teleportation_end_position = 2 = 2

但之后,它是:

  • teleportation_start_position = 2

,所以在下一行中您要做:

teleportation_end_position = max(teleportation_start_position, teleportation_end_position);
// teleportation_end_position = max(2, 2);

The error is that you are re-using the teleportation_start_position variable.

teleportation_start_position = min(teleportation_start_position, teleportation_end_position);

Before this line the state of your program is:

  • teleportation_start_position = 8
  • teleportation_end_position = 2

But after, it is:

  • teleportation_start_position = 2
  • teleportation_end_position = 2

So in the next line you are doing:

teleportation_end_position = max(teleportation_start_position, teleportation_end_position);
// teleportation_end_position = max(2, 2);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文