我在检查单调序列时遇到问题。问题是输入序列,如果单调,则打印“是”,如果不是单调,则打印“否”。
这是我的代码:
#include <stdio.h>
int main()
{
//Inputting the sequence
int n;
scanf("%d", &n);
int a[n];
for (int i = 1; i <= n; i++)
{
scanf("%d ", &a[i]);
}
//Checking monotonic sequence
for (int i = 1; i <= n; i++)
{
if ((a[i] > a[i-1]) && (a[i] > a[i+1]))
{
printf("NO");
return;
}
else if ((a[i] < a[i-1]) && (a[i] < a[i+1]))
{
printf("NO");
return;
}
}
printf("YES");
return 0;
}
我已经失败了2个测试用例,它们的序列分别为[1、2、3]和[10、6、4、2、1,-100。并通过了[1、2、3、3、2、1]的一个测试用例。谁能在我的代码中指出问题?我真的很感激。谢谢。
删除尾随" "
。输入数字后,scanf()
返回之前,它会强制进行其他输入(或文件结尾)。
// scanf("%d ", &a[i]);
scanf("%d", &a[i]);
除了在2个地方出现索引问题外,代码还需要查找整体单调的行为,而不仅仅是局部单调的行为。
bool up = true;
bool down = true;
// for (int i = 1; i <= n; i++)
for (int i = 1; i < n; i++) {
if (a[i] > a[i-1]) down = false;
if (a[i] < a[i-1]) up = false;
}
printf((up || down) ? "YES" : "NO");
短路循环的附加代码。
// for (int i = 1; i < n; i++) {
for (int i = 1; i < n && (up || down); i++) {
此外,在联系情况下缺乏编码目标的明确性。可能需要
if (a[i] >= a[i-1]) down = false;
if (a[i] <= a[i-1]) up = false;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句