Kolokwium z PPR


Zestaw 2

Zadanie 1 (5 pkt)

Napisz program, który z dwóch kolejnych lini sczytuje dwa napisy, a następnie skleja je bez spacji: najpierw drugi, potem pierwszy.
Np.
Wejście:
Gosia
KochaJasia
Wyjście:
KochaJasiaGosia

Zadanie 2 (8 pkt)

Napisz program znajdujący najmniejszą w danym ciągu liczbę.
Na wejściu znajduje się najpierw liczba liczb pojawiających się na wejściu (nie więcej niż 1000), a po niej ciąg tych liczb (każda nie większa niż 30.000, każda różna)
Na wyjściu program powinien wypisać jako która z nich jest najmniejsza
Np.
Wejście:
4 56 23 21 22
Wyjście:
21

Zadanie 3 (5 pkt)

Napisz funkcję, która zdejmuje elementy ze stosu (ang. lifo) kolejne elementy. W tym celu uzupełnij poniższy kod (nie zmieniaj deklaracji zmiennych):
int stos[567];
int wierzcholek_stosu;

int ze_stosu();
{
//???
}

Zadanie 4 (7 pkt)

Poniższy program powinien wykonać następujące operacje: Sczytać pewną liczbę x, następnie liczbę elementów w ciągu oraz cały ciąg. Następnie powinien wziąć ten ciąg i policzyć ile jest w nim liczb mniejszych od x. Wyliczoną wartość powinien wypisać.
Popraw poniższy kod.
Zakładamy, że ciąg na wejściu jest nie dłuższy niż 100000, a liczby w ciągu (tak samo jak i x) są z przedziału od -1000000 do 1000000
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>

//---------------------------------------------------------------------------

#pragma argsused

char t[100000];
int n,d,i,licz;

int main(int argc, char* argv[])
{
scanf("%d",&d);
for (i=0; i<d; i++)
{
scanf("%d",&x);
scanf("%d",&n);
for (i=0; i<=n; i++) scanf("%d",&t[i]);

licz = 0;
for (i=0; i<=n; i++) if (t[i]>x) licz+=1;
printf("%c ",t[i]);
printf("\n");
}
return 0;
}
Np:
Wejście
2
3
4 1 3 5 2
6
5 1 23 4 3 5
Wyjście:
2
4

Zadanie 5 (5 pkt)

Napisz, co robi funkcja strncat() zadeklarowana w bibliotece string.h? Opisz wejście i wyjście funkcji.

Zadanie 6 (10 pkt)

Napisz program, który sprawdza, czy podany na wejściu ciąg jest ciągiem liczb, które maleją o 1.
W pierwszej linii wejścia znajduje się jedna liczba całkowita, oznaczająca liczbę zestawów danych, które za chwilę pojawią się na wejściu. W zestawie znajduje się najpierw liczba liczb pojawiających się na wejściu (nie więcej niż 1000), a po niej odpowiednia ciąg tych dodatnich liczb (każda nie większa niż 30.000, każda różna)
Na wyjściu trzeba napisać TAK, jeśli ciąg na wejściu jest ciągiem liczb, które maleją o 1, lub NIE jeśli tak nie jest.
Np1:
Wejście:
2
5 6 5 4 3 2
6 5 7 8 9 8 7
Wyjście:
TAK
NIE

Możesz do tego wykorzystać poniższy schemat kodu:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>

//---------------------------------------------------------------------------

#pragma argsused

int t[10000];
int n,d,i,q,qq;
int ok;

int main(int argc, char* argv[])
{
scanf("%d",&d);
while (d--)
{
scanf("%d",&n);
for (i=0; i<n; i++) scanf("%d",&t[i]);

// Tu dopisz brakujący kawałek kodu, który będzie sprawdzał to, co trzeba sprawdzić zgodnie z treścią zadania

if (ok) printf("TAK\n");
else printf("NIE\n");
}
return 0;

Zadanie 7 (10 pkt)

Koledzy Jasia mają pewne hobby - chcą nazbierać jak najwięcej monet różnego rodzaju. W Bajtocji, gdzie mieszka Jaś, wszystkie nominały do 10.000 włącznie są monetami, a do każdego nominału przyporządkowana jest inna moneta. Grześ i Krzyś mają swoje kolekcje monet - po jednej z każdego rodzaju, które udało im się nazbierać. Aby swoje kolekcje powiększyć postanowili je połączyć. Po tym połączeniu mają nadzieję mieć więcej monet w swojej, teraz już wspólnej kolekcji. Dodatkowo zyskali jeszcze monety, które się powtarzały - postanowili oni nie trzymać w kolekcji powtarzających się nominałów, a powtarzające się monety przeznaczyli na kupienie sobie lodów, które obaj bardzo lubią.
Ale Krzyś jest bardzo spryny i chytry. Podejrzał wcześniej kolekcję Grzesia i chce teraz ze swojej kolekcji odrzucić powtarzające się monety i sam sobie za nie kupić lody, nie dzieląc się z Grzesiem.
Napisz program, który na podstawie wiedzy o tym jak wyglądały kolekcje Grzesia i Krzysia przed połączeniem odpowie na pytanie, jakie monety Krzyś ma zostawić w swojej kolekcji dlatego, ze nie ma ich Grześ, żeby ich wspólna kolekcja była jednak jak największa.
Wejście: W pierwszym wierszu wejścia znajduje się jedna liczba całkowita, oznaczająca liczbę zestawów danych, które za chwilę pojawią się na wejściu. Zestaw danych składa się z dwóch linii oznaczających odpowiednio kolekcję Grzesia i Krzysia. Każda kolekcja opisana jest przy pomocy wpierw jednej liczby oznaczającej liczbę monet w kolekcji, a następnie w kolejności od najmniejszej do największej, nominały monet, które znajdują się w danej kolekcji. W każdej kolekcji jest co najwyżej 10.000 monet i oczywiście nie powtarzają się one. Każda moneta ma nominał od 1 do 10.000.
Wyjście: Na wyjściu dla każdego zestawu trzeba wypisać w taki sam sposób, w jaki podane są na wejściu kolekcje, zestaw pojedynczych monet z kolekcji Krzysia, które dołoży do wspólnej kolekcji z Grzesiem. Tzn. na początku powinna znajdować się informacja o tym, ile monet powinno być w tej opisywanej kolekcji, a następnie powinny być wypisane nominały monet, które się na tę kolekcję składają, w kolejności uporządkowanej od najmniejszej do największej
Np.
Wejście:
3
3 4 8 10
5 4 8 9 10 23
8 1 2 3 4 5 6 7 8
5 8 9 10 11 12
0
3 8 23 123
Wyjście:
2 9 23
4 9 10 11 12
3 8 23 123

Zadanie 8* (5 pkt)

Mamy daną szachownicę nxn. Na jednym z pól tej szachownicy stoi koń. Twoim zadaniem jest wyznaczenie wszystkich pól, na które może wskoczyć ów szachowy koń wykonując dokładnie k ruchów (skoki).

Wejście: W pierwszej linii wejścia znajduje się jedna liczba całkowita, oznaczająca liczbę zestawów danych, które za chwilę pojawią się na wejściu. Każdy zestaw składa się na początku z jednej linii zawierającej jedną liczbę naturalną n oznaczającą rozmiar szachownicy (1 <= n <= 22). W drugiej linii zestawu znajduje się jedna liczba natualna k oznaczjąca, ile ruchów będzie wykonywał skoczek szachowy (0 <= k <= 20). Po niej znajduje się kolejna linia, w której znajduje się opis pozycji startowej konia szachowego. Pozycja zapisywana jest każdorazowo w postaci takiej, że w jednym wymiarze pola numerowane są kolejnymi literami alfabetu łacińskiego, a w drugim kolejnymi liczbami naturalnymi.
Wyjście: Na wyjściu każdy zestaw powinien odpowiadać pewnej liczbie linii. Pierwsza znich powinna zawierać liczbę X oznaczającą, na ile pól szachowych może się przemieścić koń (skoczek) wykonując dokładnie k skoków. Kolejne X linii powinno zawierać opis tych pól w notacji wcześniej opisanej
Np.
Wejście:
2
8
1
a1
8
2
a1
Wyjście:
2
b3
c2

10
a1
a3
a5
b4
c5
c1
d4
d2
e1
e3