Elem(ek) beszúrása tömbbe

Elem beszúrása tömbbe

Adott n, egy n elemű tömb, illetve egy k index és egy új érték.

Szúrjuk be a tömb k-adik indexére az új értéket, megtartva az összes többi elemet.

    Pl.  5
         10 20 30 40 50
         2 7

    kimenet:
         10 20 7 30 40 50

Ötlet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int t[100];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    int k, uj_ertek;
    cin >> k >> uj_ertek;

    for (int i = n-1; i >= k; i--) {
        t[i+1] = t[i];
    }

    t[k] = uj_ertek;
    n++;


    for (int i = 0; i < n; i++)
        cout << t[i] << " ";
    cout << endl;

    return 0;
}

HF.

Kövessük nyomon (papíron) egy olyan példára, ahol az első helyre szúrunk be (k==0), illetve egy olyanra, ahol az utolsóra (k==n-1), meg egy olyanra is, ahol k==n (az utolsó utánira szúrunk be).

Több elem beszúrása

Több elem beszúrása esetén azokat beszúrjuk rendre (és figyelünk az indexre, hogy mennyit nőjön).

Feladat: Adott tömbbe minden 10-zel osztható szám után szúrjunk be egy 0-t.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int t[100];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    int i = 0;
    while (i < n) {
        if (t[i] % 10 == 0) {
            // beszúrunk az [i+1] index-re
            for (int j = n-1; j >= i+1; j--) {
                t[j+1] = t[j];
            }
            t[i+1] = 0;
            n++;

            i += 2;
        }
        else {
            i++;
        }
    }

    for (int i = 0; i < n; i++)
        cout << t[i] << " ";
    cout << endl;

    return 0;
}

Vagy: új tömbben építjük fel az eredményt egyetlen végigjárással.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int t[100];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    int uj[200];
    int n_uj = 0;

    for (int i = 0; i < n; i++) {
        uj[n_uj] = t[i];
        n_uj++;

        if (t[i] % 10 == 0) {
            uj[n_uj] = 0;
            n_uj++;
        }
    }

    for (int i = 0; i < n_uj; i++)
        cout << uj[i] << " ";
    cout << endl;

    return 0;
}