#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int sg = 0;
for (int i = 0; i < n-1 ; i++)
{
if (a[0] >= a[1])
{
if(a[i]<a[i+1]&&(sg==0||sg==2))
{
sg++;
}
if (sg != 0 && a[i] > a[i + 1])
{
sg++;
}
}
if (a[0] < a[1])
{
if (a[i] >a[i + 1] && (sg == 0||sg==2))
{
sg++;
}
if (sg != 0 && a[i] < a[i + 1])
{
sg++;
}
}
}
if (sg == 0 ||sg== 1||sg==2)
{
cout << "Yes";
}
else
cout << "No";
}
不好意思未知测试数据😬
任何不符合条件的数组必然有三个及三个以上的单调性改变点sg
应该是判断以某个位置为分界点分成的两个部分是否都是有序的,你的代码里只根据a[0]和a[1]的大小来判断是不全面的
运行结果:
代码:
#include<iostream>
using namespace std;
//判断数组a中,从start位置到n是否是有序
int isYouxu(int a[],int start,int n)
{
int i;
if(a[start+1] > a[start])//升序
{
for(i=start+1;i<n;i++)
{
if(a[i] > a[i-1])
continue;
else
return 0;
}
}else if(a[start+1] == a[start]) //相等
{
for(i=start;i<n;i++)
{
if(a[i]!=a[start])
return 0;
}
return 1;
}else
{
for(i=start+1;i<n;i++) //降序
{
if(a[i] < a[i-1])
continue;
else
return 0;
}
}
return 1;
}
int main()
{
int n;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int sg = 0;
for (int i = 2; i < n-1 ; i++)
{
if(isYouxu(a,0,i) && isYouxu(a,i,n))
{
sg = 1;
break;
}
}
if (sg == 1)
{
cout << "Yes";
}
else
cout << "No";
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!