Kolokwium z PPR
Zestaw 2
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 iloczyn dwóch liczb całkowitych
Np.
Wejście:
3
4
Wyjście:
12
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 odpowiednia liczba takich
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 do 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;
void do_kolejki(int x);
{
//???
}
Zadanie 4 (7 pkt)
Poniższy program powinien przeczytane na wejściu liczby wypisać na
wyjściu jako posortowane w kolejności odwrotnej.
Niestety znajduje się w nim kilka błądów -
popraw je.
//---------------------------------------------------------------------------
#pragma hdrstop
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsused
int t[10000];
int n,d,i,j,dl;
int c[10000];
int main(int argc, char* argv[])
{
scanf("%d",&d);
for (i=0; i<d; i++)
{
scanf("%d",&n);
for (i=0; i<n; i++) scanf("%c",&t[i]);
for (i=1; i<=n; i++) c[t[i]]++;
for (i=10000; i>=0; i--)
{
c[i] = 0;
for(j=0; j<c[i]; j++) printf("%d ",i);
}
printf("\n");
}
return 0;
}
Np:
Wejście
2
6 789 378 327 31 1 23
3 1 2 3
Wyjście:
789 378 327 31 23 1
3 2 1
Zadanie 5 (5 pkt)
Napisz, co robi funkcja strdup() zadeklarowana w bibliotece string.h?
Zadanie 6 (10 pkt)
Napisz program, który sprawdza, czy podany na wejściu ciąg jest
prawidłowo posortowany maleją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 malejąco, lub NIE jeśli nie jest posortowany.
Np1:
Wejście:
2
5 10 8 7 3 2
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ła ich wspólna
kolekcja po połączeniu
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, wspólną kolekcję Grzesia
i Krzysia. Tzn. na początku powinna znajdować się informacja o tym, ile
monet znajduje się w ich wspólnej kolekcji, a następnie powinny być
wypisane nominały monet, które na tą kolekcję się składają, w
kolejności uporządkowanej od najmniejszej do największej
Np.
Wejście:
3
3 4 7 9
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:
6 4 7 8 9 10 23
12 1 2 3 4 5 6 7 8 9 10 11 12
3 8 23 123
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