有趣的跳跃一维数组问题

img

img


我的代码以及题目如上,十个标准答案,我对了八个,还有两个是错的,帮忙看一下哪里出问题了?

程序有点复杂,根本不需要做排序
假设有四个元素,那么相邻值之差就是3个元素,且值分别是1,2,3(顺序不一定)
那么你只需要定义一个数组a[3],初始值为0,在计算相邻值之差的循环时,将差值减去1作为下标,如果a数组中该下标对应值已经是1,则直接返回不是跳跃数组,如果是0,则将对应值设置为1。如果循环能够正常结束,则输出是跳跃数组就可以啦

int main()
{
    int num = 0;
    int a[3000] = {0};
    int b[3000] = {0};
    cin>>num;
    for(int i=0;i<num;i++)
        cin>>a[i];
    for(int i=0;i<num-1;i++)
    {
        int k = abs(a[i+1]-a[i]);
        if(k<3000)
        {
            if(b[k] == 0)
                b[k] = 1;
            else if(b[k] == 1)
            {
                cout<<"Not jolly";
                return 0;
            }
        }
        else
        {
            cout<<"Not jolly";
            return 0;
        }
        
    }
    cout<<"jolly";
    return 0;
}