代码找错thank you

问题遇到的现象和发生背景

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#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";

}

运行结果及详细报错内容

不好意思未知测试数据😬

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

任何不符合条件的数组必然有三个及三个以上的单调性改变点sg

应该是判断以某个位置为分界点分成的两个部分是否都是有序的,你的代码里只根据a[0]和a[1]的大小来判断是不全面的

运行结果:

img

img

代码:

#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;
}



您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632