Kolokwium z PPR
Zestaw 1
UWAGA! W każdym zadaniu można pisać programy, które uwzględniają liczbę
zestawów na początku, ale nie trzeba.
Zadanie 1 (5 pkt)
Napisz program obliczający sumę dwóch liczb całkowitych
Np.
Wejście:
3
4
Wyjście:
7
Zadanie 2 (8 pkt)
Napisz program znajdujący najmniejszą spośród danego 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 odpowiednia liczba takich
liczb oddzielonych spacją (każda nie większa niż 30.000, każda różna)
Na wyjściu program powinien wypisać najmniejszą z nich
Np.
Wejście:
4 56 23 21 22
Wyjście:
21
Zadanie 3 (5 pkt)
Napisz funkcję, która wyciąga z kolejki (ang. fifo) kolejne elementy. W
tym celu uzupełnij poniższy kod (nie zmieniaj deklaracji zmiennych):
int kolejka[567];
int poczatek_kolejki, koniec_kolejki;
int z_kolejki();
{
//???
}
Zadanie 4 (7 pkt)
Poniższy program powinien przeczytane na wejściu litery wypisać na
wyjściu jako posortowane w kolejności odwrotnej do alfabetycznej.
Niestety znajduje się w nim kilka błądów -
popraw je.
//---------------------------------------------------------------------------
#pragma hdrstop
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsused
char t[10000];
int n,d,i,j,dl;
int c[256];
int main(int argc, char* argv[])
{
scanf("%d",&d);
for (i=0; i<d; i++)
{
scanf("%s",&t);
dl=strlen(t);
for (i=1; i<=dl; i++) c[t[i]]++;
for (i=255; i>=0; i--)
{
c[i] = 0;
for(j=0; j<c[i]; j++) printf("%c",i);
}
}
return 0;
}
Np:
Wejście
2
asddf
fkjpo
Wyjście:
sfdda
pokjf
Zadanie 5 (5 pkt)
Napisz, co robi funkcja qsort() zadeklarowana w bibliotece stdlib.h?
Zadanie 6 (10 pkt)
Napisz program, który sprawdza, czy podany na wejściu ciąg jest
prawidłowo posortowany rosnąco.
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 liczba takich
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 prawidłowo
posortowany rosnąco, lub NIE jeśli nie jest posortowany.
Np1:
Wejście:
2
5 2 4 7 9 10
6 5 7 8 9 6 4
Wyjście:
TAK
NIE
Uzupełnij kod poniższego programu:
//---------------------------------------------------------------------------
#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ł, czy ciąg jest posortowany
if (ok) printf("TAK\n");
else printf("NIE\n");
}
return 0;
}
Zadanie 7 (10 pkt)
Koledzy Jasia mają inne 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 monet,
które będą mogli przeznaczyć na lody.
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, liczbę 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 monet
przeznaczonych przez Grzesia i Krzysia na lody. Tzn. na początku
powinna znajdować się informacja o tym, ile
monet nie znalazło miejsca w ich wspólnej kolekcji, a następnie powinny
być
wypisane nominały monet, które się na tą resztę 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:
3 4 8 10
1 8
0
Zadanie 8* (5 pkt)
Napisz sortowanie alfabetyczne wyrazów pojawiających
się na wejściu.
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ą X
oznaczającą liczbę wyrazów, które za chwilę pojawią się na wejściu (1
<= X <= 10000). Po niej znajduje się X
linii, a w każdej z nich jeden wyraz (bez spacji, o maksymalnej
długości 255 znaków). Wszystkie wyrazy składają się tylko i wyłącznie z
małych liter alfabetu łacińskiego.
Wyjście: Na wyjściu każdy zestaw powinien odpowiadać X liniom. Linie te
powinny zawierać wyrazy z wejścia podane w kolejności alfabetycznej.
Np.
Wejście:
1
8
hiena
ewangelia
garnek
cytryna
domek
fanaberia
alabaster
broszura
Wyjście:
alabaster
broszura
cytryna
domek
ewangelia
fanaberia
garnek
hiena