Mam do napisania program takiej treści:
Wejście:
W pierwszej linii wejścia dana jest liczba \(\displaystyle{ n}\) (\(\displaystyle{ 1 \le n \le 10^6}\)) - rozmiar pierwszego zbioru. Następnie danych jest n różnych liczb całkowitych w porządku rosnącym (nie większych od \(\displaystyle{ 10^9}\)). W drugiej linii wejścia dana jest liczba \(\displaystyle{ m}\) (\(\displaystyle{ 1 \le m \le 10^6}\)) - rozmiar drugiego zbioru. Następnie danych jest m różnych liczb całkowitych w porządku rosnącym (nie większych od \(\displaystyle{ 10^9}\)).
Wyjście:
W pierwszej linii należy wypisać sumę zbiorów (w porządku rosnącym). W drugiej linii należy wypisać przekrój zbiorów (w porządku rosnącym). W trzeciej linii należy wypisać różnicę symetryczną zbiorów (w porządku rosnącym).
Przykład:
Kod: Zaznacz cały
Dla danych wejściowych:
10 2 3 5 6 7 9 10 12 14 16
10 3 4 6 7 9 11 12 14 15 16
poprawną odpowiedzią jest:
2 3 4 5 6 7 9 10 11 12 14 15 16
3 6 7 9 12 14 16
2 4 5 10 11 15
Kod: Zaznacz cały
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int A[n];
for (int i=0; i<n; i++) scanf("%d", &A[i]);
int m;
scanf("%d", &m);
int B[m];
for (int i=0; i<m; i++) scanf("%d", &B[i]);
int C[n+m];
for (int i=0; i<n; i++) C[i] = A[i];
for (int i=0; i<m; i++) C[i+n] = B[i];
sort(C, C+n+m);
for (int i=0; i<n+m; i++)
if ( C[i] != C[i+1] )
printf("%d ", C[i]);
printf("
");
int k = 0;
int D[k];
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if ( A[i] == B[j] )
{
D[k] = A[i];
k = k+1;
}
for (int i=0; i<k; i++) printf("%d ", D[i]);
printf("
");
return 0;
}
Programować zacząłem od niedawna, stąd moja prośba: Czy mógłby mi ktoś zmodyfikować ten program, aby spełniał wszystkie zalecenia podane w zadaniu?