-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 に答える