2017-04-11 11 views
1

私は自分のプログラムに少し問題があり、何が間違っているのかを解決することはできません。基本的に、昇順にソートされた2つの配列があり、それらを1つにマージする必要があります。整理されたマージ問題

私は、出力があることを期待:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 

しかし、それは次のようになります。私は、出力の最後の値が14でないことを、間違っ

1 2 3 4 5 6 7 8 9 10 11 12 13 0 

何をしているのですか?私はこれに対する解決策は非常に簡単だと思いますが、私はそれを理解することはできません。ここで

はコードです:

#include<iostream> 
#include<cstdlib> 
using namespace std; 

int main(){ 

int arrA[]={1,3,5,7,9,11,13}; 
int arrB[]={2,4,6,8,10,12,14}; 
int arrC[sizeof(arrA)/sizeof(int)+sizeof(arrB)/sizeof(int)]; 

int sizeA=sizeof(arrA)/sizeof(int); 
int sizeB=sizeof(arrB)/sizeof(int); 
int sizeC=sizeof(arrC)/sizeof(int); 

for (int i=0;i<sizeA;){ 
    for (int j=0;j<sizeB;){ 
     if (arrA[i]<=arrB[j]){ 
      arrC[i+j]=arrA[i++]; 
     } 
     else{ 
      arrC[i+j]=arrB[j++]; 
     } 
    } 
} 

for (int i=0; i<sizeC; i++){ 
    cout << arrC[i] << " "; 
} 
return 0; 
} 

答えて

3

実際にあなたがあなたが最後の14の要素であるarrC [13]に値を代入ポイントを得ることはありません。あなたの外側ループi == 6のための最後の反復で、そして内側ループのための同じ繰り返し。したがって、i + jが12のときに終了します。

+0

したがって、ループを変更する必要があります。手伝ってくれてありがとう ;) – Ensz

関連する問題