因此,如果第一个和第二个数组的元素不是递减顺序,那么如何以相同的不递减顺序制作第三个?这是我的代码,但我不知道我错在哪里:
int main() {
int a[10], b[10];
int m, n, i, j;
cout << " Vavedete maks. broi el. za masiv 1: "; cin >> m;
cout << " Vavedete maks. broi el. za masiv 2: "; cin >> n;
cout << endl;
for (i = 0; i < m; i++) {
cout << " Vavedete " << i << " element za masiv 1: "; cin >> a[i];
} cout << endl << endl;
for (j = 0; j < n; j++) {
cout << " Vavedete " << j << " element za masiv 2: "; cin >> b[j];
}
int c[20];
int k;
i = 0;
j = 0;
for (k = 0; k < (m + n); k++) {
if (a[i]>b[j]) {
c[k] = b[j];
j++;
}
else {
c[k] = a[i];
i++;
}
}
cout << " Noviyat masiv e: ";
for (k = 0; k < (m + n); k++) {
cout << c[k] << " ";
} cout << endl;
system("pause");
}
答案 0 :(得分:0)
for (k = 0; k < (m + n); k++) {
if (a[i]>b[j]) {
c[k] = b[j];
j++;
}
else {
c[k] = a[i];
i++;
}
}
您通过比较当前值并将较小的值插入c
来合并数组。但最终您会到达j >= n
或i >= m
的位置,这意味着您已将a
或b
数组的所有值插入{{1} }。如果c
,那么比较j >= n
是未定义的,因为a[i] > b[j]
超出范围。
将循环条件更改为j
。一旦数组的完全插入i < m && j < n
,您的循环就会退出。此时,您可以插入其他数组的其余部分:
c
请注意,实际上只会执行其中一个循环。