Cerința
Se dă un șir cu n elemente, numere naturale, numerotate începând cu 1 și un număr k. Considerăm k subșiruri ale șirului, astfel:
-primul subșir este format din elementele din șir numerotate cu 1, k+1, 2*k+1, …
-al doilea subșir este format din elementele din șir numerotate cu 2, k+2, 2*k+2, …
-…
-al k-lea subșir este format din elementele din șir numerotate cu k, 2*k, 3*k, …
Ordonați crescător fiecare dintre aceste subșiruri și afișați șirul obținut.
Date de intrare
Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele șirului.
Date de ieșire
Programul va afișa pe ecran elementele șirului, separate prin exact un spațiu, după efectuarea operațiilor cerute.
Restricții și precizări
1 ≤ k < n ≤ 1000
cele n numere citite vor fi mai mici decât 1.000.000.000
Exemplu
Intrare
11 3
7 5 4 3 1 6 8 9 11 10 2
Ieșire
3 1 4 7 2 6 8 5 11 10 9
Explicație
Cele trei subșiruri sunt: (7 3 8 10), (5 1 9 2) și (4 6 11). După sortare, ele devin: (3 7 8 10), (1 2 5 9) și (4 6 11).
Problema este de pe pbinfo si se numeste Ksort1. In c++ va rog.
Multumesc
Răspunsuri la întrebare
Răspuns de
5
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;
# define MAX_K 1000
vector<int> s[MAX_K];
int main() {
int n, k, i, nr;
cin >> n >> k;
for ( i = 0; i < n; i ++ ) {
cin >> nr;
s[i % k].push_back( nr );
}
for ( i = 0; i < k; i ++ )
sort( s[i].begin(), s[i].end() );
for ( i = 0; i < n; i ++ )
cout << s[i % k][i / k] << ' ';
return 0;
}
# include <vector>
# include <algorithm>
using namespace std;
# define MAX_K 1000
vector<int> s[MAX_K];
int main() {
int n, k, i, nr;
cin >> n >> k;
for ( i = 0; i < n; i ++ ) {
cin >> nr;
s[i % k].push_back( nr );
}
for ( i = 0; i < k; i ++ )
sort( s[i].begin(), s[i].end() );
for ( i = 0; i < n; i ++ )
cout << s[i % k][i / k] << ' ';
return 0;
}
VoxBig:
Multumesc mult :)
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă