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:
- a k indextől kezdődő részben mindenkit jobbra tolunk egy-egy pozícióval
- fontos a tologatások sorrendje (jobbról balra kell haladni)
- az új elem bekerül a felszabadult helyre
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;
}
|