gpt4 book ai didi

检查数组是否有棱纹

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:09 24 4
gpt4 key购买 nike

一个一维数组称为肋状数组,如果每个具有前驱和后继的元素都严格大于它们中的两个(前驱和后继)或严格小于它们两者。对于长度为 n(2 < n < 100) 的一维数组,判断数组是否有棱纹。

#include <stdio.h>

int main ()
{

int n, i, j;
int check=0;
scanf ("%d", &n);
if (n<2 || n>100)
{
printf("Invalid input");
}
j=n;
int m[j];

for (j=0; j<n; j++)
{
scanf ("%d", &m[j]);

}
for (i=0; i<n-2; i++)
{
if ( ( ( m[i] < m[i+1] ) && ( m[i+1] > m[i+2] ) ) ||
( ( m[i] > m[i+1] ) && ( m[i+1] < m[i+2] ) ) )
{
check=1;
}
else check=0;

}


if (check==1 )
{
printf ("YES");
}
else if (check==0)
{
printf ("NO");
}

return 0;



}

这是我的测试用例得到的结果 http://prntscr.com/53zoc3 .每次我提交答案时都会得到不同的结果,例如第三和第四个案例 http://prntscr.com/53zt79 .我只是想知道我是否可以就第二种情况问题需要解决的问题发表意见,以及我的代码总体上是否不错。提前致谢!

最佳答案

您的问题是 check 在 for 循环仅通过检查数组的最后一个(也是一个)元素来设置之后。但较早的元素可能无法通过罗纹测试。

如果循环中的任何元素未通过“肋状”测试,您需要停止测试更多元素,因为此时您知道数组没有肋状。

所以给失败案例添加一个中断:

for (i = 0; i < n - 1; i++) {
if (((m[i] < m[i + 1]) && (m[i + 1] > m[i + 2]))
|| ((m[i] > m[i + 1]) && (m[i + 1] < m[i + 2]))) {
check = 1;
} else {
check = 0;
break;
}
}

关于检查数组是否有棱纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807920/

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