-3

在输入中,我必须指定数组及其元素,输出应采用下面给出的形式

输入

5
2 4 6 8 3

样本输出

2 4 6 8 8 
2 4 6 6 8 
2 4 4 6 8 
2 3 4 6 8

这是我的输出

2 4 6 8 8
 2 4 6 6 8
 2 4 4 6 8
 2 4 3 6 8
 2 3 3 6 8
 2 3 3 6 8

int main() {    

    int* a=0;
    int n,x;
    std::cout<<"Enter size ";
    std:: cin>>n;
    std::cout<<"Enter elements ";
    a=new int[n];

    for(int i=0;i<n;i++){
        std::cin>>x;
        a[i]=x;
    }

    int q=a[n-1];
    for(int i=n;i>=0;i--){
        if(a[i-2]>q)
        {   a[i-1]=a[i-2];
        }else 
            a[i]=q;

        for(int j=0;j<n;j++ )
        {   std::cout<<a[j];cout<<" ";
        }
        cout<<" \n ";
    }

    //for(int j=0;j<n;j++ ){std::cout<<a[j];}
    getch();             
}

我究竟做错了什么?

4

1 回答 1

2

自从i一路下降到0. 然后i-2可以去-2。因此,这一行索引在数组的开头之前,这是未定义的行为:

    if(a[i-2]>q)

在这里,您正在分配数组中的值,而不记得旧值是什么。

    }else 
        a[i]=q;

因此,您正在丢失信息,因此会出现问题,因为排序不应该破坏信息。

于 2013-10-05T16:32:41.630 回答