通过组合用户输入的前两个来制作第三个数组

时间:2014-11-30 16:05:49

标签: c++ arrays

因此,如果第一个和第二个数组的元素不是递减顺序,那么如何以相同的不递减顺序制作第三个?这是我的代码,但我不知道我错在哪里:

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");
}

1 个答案:

答案 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 >= ni >= m的位置,这意味着您已将ab数组的所有值插入{{1} }。如果c,那么比较j >= n是未定义的,因为a[i] > b[j]超出范围。

将循环条件更改为j。一旦数组的完全插入i < m && j < n,您的循环就会退出。此时,您可以插入其他数组的其余部分:

c

请注意,实际上只会执行其中一个循环。