Kolokwium z PPR


Zestaw 1

Zadanie 1 (5 pkt)

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

Zadanie 2 (8 pkt)

Napisz program znajdujący indeks najmniejszej spośród danego ciągu liczby.
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 pojawiła się ta najmniejsza
Np.
Wejście:
4 56 23 21 22
Wyjście:
3

Zadanie 3 (5 pkt)

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

void na_stos(int x);
{
//???
}

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. (Wszystko jest poprzedzone liczbą zestawów) Następnie powinien wziąć ten ciąg i wypisać wszystkie elementy, które są od tego x mniejsze. Ich kolejność powinna być taka sama jak w wejściowym ciągu.
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;

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]);

for (i=0; i<=n; i++) if (t[i]>x) 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:
1 2
1 4 3 5

Zadanie 5 (5 pkt)

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

Zadanie 6 (10 pkt)

Napisz program, który sprawdza, czy podany na wejściu ciąg jest ciągiem liczb, które rosną 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 odpowiedni ciąg tych liczb (każda nie większa niż 30.000, każda różna, każda dodatnia)
Na wyjściu trzeba napisać TAK, jeśli ciąg na wejściu jest ciągiem liczb, które rosną o 1, lub NIE jeśli tak nie jest.
Np:
Wejście:
2
5 2 3 4 5 6
6 5 7 8 9 10 12
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ą.
Napisz program, który na podstawie wiedzy o tym jak wyglądały kolekcje Grzesia i Krzysia przed połączeniem odpowie na pytanie, jak będzie wyglądał zestaw pojedynczych monet przed kupieniem lodów, tzn. takich które występują tylko i wyłącznie w kolekcji Grzesia, albo tylko i wyłącznie w kolekcji Krzysia.
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 w kolekcji Grzesia i Krzysia przed pójściem na lody. Tzn. na początku powinna znajdować się informacja o tym, ile monet nie znalazło miejsca w tej kolekcji, a następnie powinny być wypisane nominały monet, które się na nią 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
11 1 2 3 4 5 6 7 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