一开始提交只有百分之20的通过率,然后发现是for(i=0;i<n-1;i++) n-1很重要 因为底下有i+1;当没有的话就会数组越界 但是木有错误提示 这种错误很难查。改过来就是百分之80的概率。说明有某种情况还是未考虑到。下面是我经过反复测试改过的完全正确的代码,不容易啊
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int *a=new int[n];
int i=0,j=0;
for(i=0;i<n;i++)
{
cin>>a[i];
}
int flg1=0,flg2=0,flg3=0,flg4=0;
for(i=0;i<n-1;i++)
{
if(a[i]<a[i+1])
continue;
else
{
flg1++; //if(a[i]>a[i+1])
for(j=i;j<n-1;j++)
{
if(a[j]>a[j+1])
{
flg3++;
continue;
}
else
{
flg2++;
break;
}
}
}
if(flg3==1) //flg3==1说明只有一个突然下降,处理诸如 1 3 7 4 5(错) 1 3 2 4 5(对)
{
if(a[j-1]>a[j+1])
flg4=1;
}
if(flg1>1||flg2>1||(flg4==1))
{
cout<<"no"<<endl;
delete []a;
return 1;
}
i=j;
}
if((flg1==1)&&(flg2==1))
{
cout<<"yes"<<endl;
delete[]a;
return 1;
}
else
{
cout<<"no"<<endl;
delete[]a;
return 1;
}
}