Tömbök - elemek beszúrása

Elem beszúrása tömbbe

Adott n és egy n elemű tömb. Adott még egy k és egy x érték. Szúrjuk be x-et a tömb [k] indexére (0-tól számozva).

Példa:

    bemenet:
        5
        10 20 30 40 50
        2
        5

    kimenet:
        10 20 5 30 40 50

                    k
        t[0]  t[1]  t[2]  t[3]  t[4]  t[5]
        10    20    30    40    50    ?
                                    50
                                40
                        30
                    5
 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
#include <iostream>
using namespace std;

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

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

    int k, x;
    cout << "k = ";
    cin >> k;
    cout << "x = ";
    cin >> x;

    // csúsztatás
    for (int j = n-1; j >= k; j--) {
        t[j+1] = t[j];
    }

    t[k] = x;
    n++;


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

Több elem beszúrása

Adott egy tömb. Minden 1-es elem után szúrjunk be egy 0-t.

Példa

    bemenet:
        6
        2 1 3 1 1 5
    kimenet:
        2 1 0 3 1 0 1 0 5

    HF!
 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[1000];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    for (int i = 0; i < n; i++)
        if (t[i] == 1) {
            // t[i+1]-re be kell szúrni egy 0-t

            for (int j = n-1; j >= i+1; j--)
                t[j+1] = t[j];

            t[i+1] = 0;
            n++;
            i++;
        }

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

Feladat:

https://www.pbinfo.ro/probleme/159/inseraredupa Minden páros elem után be kell szúrni annak a duplájá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
#include <iostream>
using namespace std;

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

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

    for (int i = 0; i < n; i++)
        if (t[i] % 2 == 0) {
            // t[i+1]-re be kell szúrni egy 2*t[i]-t

            for (int j = n-1; j >= i+1; j--)
                t[j+1] = t[j];

            t[i+1] = 2*t[i];
            n++;
            i++;
        }

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

HF:

https://www.pbinfo.ro/probleme/2734/elimrep
Törölni kell az ismétlődő elemeket, megtartva csak az első előfordulásukat.