2003 variant C
- Daný program po načítaní dvoch čísel A a
B vypíše hodnotu P:
var
i,j,A,B,P:integer;
begin
read(A,B);
P:=0;
for i:=A to B do begin
j:=i;
while (j>0) and (j mod 7 = 3) do begin
P:=P+1;
j:=j div 7;
end;
end;
writeln(P);
end;
- Zistite, čo sa vypíše, ak zadáme A=15 a B=35.
- Zistite, čo sa vypíše, ak zadáme A=1 a B=101.
- Predpokladajme, že B=1000. Zistite, aké musíme zadať
najväčšie A, aby sa vypísalo číslo 26.
Pozn.
- x mod y znamená zvyšok po delení čísla
x číslom y, napr. 127
mod 10 = 7
- x div y znamená celočíselné delenie
čísla x číslom y, napr. 127
div 10 = 12.
- V danom dvojrozmernom poli A celých čísel (N-riadkov
po M-stĺpcov) uchovávame priebežné bodovanie N súťažiacich
v M rôznych súťažiach. A[i,j] označuje získané
body i-teho súťažiaceho v j-tej súťaži - ak ešte túto
súťaž tento súťažiaci neabsolvoval, tak je tu hodnota 0.
Zrejme
niektorí súťažiaci budú ešte získavať body v
súťažiach a môžu tým ešte zmeniť poradie. Môžeme
predpokladať, že súťažiaci by teoreticky mohol získať toľko
bodov, koľko už získal v tejto súťaži aj niekto iný.
Daná
časť programu zisťuje, ktorý hráč má najväčšiu
šancu vyhrať, ak predpokladáme, že z tých súťaží,
v ktorých sa ešte nezúčastnil (má 0 bodov), môže
teoreticky získať toľko, ako momentálne najúspešnejší
súťažiaci v tejto súťaži.
V programe však niekto vynechal
niektoré aritmetické a logické výrazy. Opravte
program!
var
A:array[1..N,1..M] of integer;
max:array[1..M] of integer;
i,j,p,maxp,x:integer;
begin
{zistí maximálny počet bodov pre každú súťaž}
for i:=1 to M do begin
max[i]:=_____________;
for j:=2 to N do
if ____________ then max[i]:=A[j,i];
end;
{hľadá najúspešnejšieho hráča}
maxp:=0; x:=0;
for i:=1 to N do begin
p:=0;
for j:=1 to M do
if _______________ then p:=____________
else p:=______________;
if _____________ then begin maxp:=p; x:=__________; end;
end;
writeln('najväčšiu šancu vyhrať má súťažiaci číslo ',x);
end;
- Máme danú množinu znakových reťazcov,
ktoré sú zložené z písmen A a B
a všetky sú ukončené nejakou cifrou 1, 2 alebo
3. Takýmto reťazcom budeme hovoriť slová. Slová
v tejto množine vznikli podľa špeciálnych pravidiel:
x = Ay | Bz | 1
y = Az | Bx | 2
z
= Ay | Bx | 3
Aby sme vytvorili nejaké nové slovo do tejto množiny, vždy
zoberieme štartové písmeno x, nájdeme zodpovedajúce
pravidlo (prvý riadok pravidiel) a vyberieme nejakú z možností
(možnosti sú oddelené znakom "|" ) – písmeno
x nahradíme touto možnosťou. Ak výsledok obsahuje jedno
z písmen x, y alebo z, pokračujeme
v nahrádzaní podľa príslušného pravidla. Celý
proces vytvárania nového slova zrejme končí, keď písmeno
nahradíme cifrou. Postup nahrádzania budeme značiť šípkou,
napr. takto
x => Ay => ABx => ABBz
=> ABB3 ... t.j. vznikla postupnosť písmen A
a B a vždy končí nejakou cifrou od 1 do 3.
- Zistite, akou cifrou končia slová AABAABABBABBABBABB
a ABBBBAABBBAAABBAAAAB.
- Zistite, koľko existuje rôznych slov dĺžky 6, ktoré
sú zložené z 5 znakov A a B a končia znakom
2.
- Deti v škole robili na fyzikálnych laboratóriách
nejaké experimenty a svoje merania zapisovali do tabuľky. Jeden žiak
dostal na záver za úlohu, všetky tieto merania zapísať
do počítača. Keďže asi nepochopil, ako si to učiteľ predstavoval,
všetky merania zapísal za seba do jednorozmerného poľa merania,
pričom pred merania každého jedného spolužiaka vložil číslo
vyjadrujúce počet jeho meraní. Takže pole s meraniami mohlo
vyzerať napr. takto:
3 15
12 14 2 13 13 4 10 10 15 10
a môžeme z toho
vidieť, že sú tu merania troch žiakov, pričom prvý mal tri
merania, druhý dve a najviac meraní (štyri) mal tretí.
Napíšte
program, ktorý pre dané N-prvkové pole merania
vypíše:
- koľko žiakov robilo merania;
- ktorý žiak mal najviac meraní; ak bolo viac
takých, ktorí mali rovnaký počet najviac meraní,
tak potrebujeme poznať toho, ktorému vyšiel najväčší
súčet všetkých jeho meraní (program vypíše
poradové číslo takéhoto žiaka).
Môžete použiť ľubovoľný programovací jazyk, ktorý
ste používali na strednej škole. Predpokladajte, že N-prvkové
celočíselné pole merania je už na začiatku programu
zaplnené hodnotami a je zadané korektne.
© AB