gpt4 book ai didi

c++ - 确定给定序列是单调的还是严格单调的

转载 作者:行者123 更新时间:2023-11-28 01:17:29 28 4
gpt4 key购买 nike

我正在实现序列的一个简单解决方案,看看它是单调的还是严格单调的。我尝试了不同的输入,角落/最坏的情况,它有效,为了更好地展示问题,以下是问题的具体陈述。

判断一个数列是严格单调的还是单调的。

输入:

包含整数 n (2 ≤ n ≤ 10^9) - 序列中的元素数。后面有n个元素。

输出:

如果序列是严格单调的则写“2”否则如果序列是单调的则写“1”和“0”在其他情况下。

我的代码:

 #include <iostream>
//#include <cmath>

using namespace std;
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n, a, b, p, q, e, c; e = 0; q = 0; p = 0;
cin >> n >> a;
for (int i = 0; i < n - 1; i++)
{
cin >> b;
if (a > b) { p = 1;
if (q) { cout << 0; return 0; }
}
if (a < b) { q = 1;
if (p) { cout << 0; return 0; }
}
if (a == b) { e = 1; }
a = b;
}
if (e) { cout << 1; }
else { cout << 2; }
return 0;
}

虽然我的代码没有通过我大学的评审,但它给出了时间限制错误。我的代码有什么问题?我的意思是,你必须遍历所有 n,这段代码是 O(n),并且 n <= 10^9。

最佳答案

我试过你的代码。
我不得不删除两个 freopen,这破坏了原本看起来像是 MRE 的东西。

编译成功

我输入了4,对于4个输入,然后
2
1

输出为0。

a) 你的代码忽略了第二个值之后的所有内容
b) 你的代码提前终止
c) 对于严格单调递减序列(非忽略部分)“2,1”,它输出“其他情况”的值

我想这并不能回答你心中的问题。
但是你必须问那个,因为我认为你写的那个已经回答了。

如果您的问题实际上是“我怎样才能找出我的代码的哪一部分导致了错误?”我建议使用调试器:
How to debug using gdb?
How to debug in Codeblocks?

或者,更一般地说,
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/

关于c++ - 确定给定序列是单调的还是严格单调的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155884/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com