1. ZADATAK
35 bodova, program mora dat
i rješenje za mnje od 30 sekundiMarko je preko ljeta radio u pekari. Pošto mu pečenje kruha baš i nije išlo, šef mu je dao da pakira vreće brašna po narudžbi. "Ajde, bar nešto lagano....baš mi se i neda razmišljat po ovakvoj vrućini!", misli si Marko. Kad tamo pekara ima samo vreće od
17, 19 i 23 kilograma, a kupac želi isključivo pune vreće i to onu kombinaciju koja ima najveći broj vreća od 23 kg. "Ajoj!!! Da sam bar malo više pazio na informatici, sad bih to znao riješiti."Na svu sreću Markov brat (blizanac) Antonio sjetio se kako se to rješava i pomogao bratu odraditi svoj dio posla kako treba. Kupci su svi sretni dobivali naručenu količinu brašna (ako ju je bilo moguće na taj način isporučiti).
Napišite program koji će riješiti ovaj problem!
Ulazni podaci
: količina željenog brašna u kilogramima
Izlazni podaci
: broj vreća od 17, 19 i 23 kilograma potrebnih za isporuku ili odgovarajućaporuka ukoliko ne postoji
način da se ta količina upakiraNpr.
ULAZ
97
IZLAZ
2 x 23 kg, 0x19 kg i 3x17 kg.
RJEŠENJE
program brasno;
var n,x,y,z : integer;
BEGIN
write('Koliko brasna? '); readln(n);
for x:=n div 23 downto 0 do
for y:=n div 19 downto 0 do
for z:=n div 17 downto 0 do
begin
if (x*23 + y*19 + z*17)=n then
begin
writeln(x,'x23 ',y, 'x19
',z,'x17');
readln; halt;
end;
end;
writeln('nema rjesenja...'); readln;
END.
2. ZADATAK
45 bodova, program mora dat
i rješenje za mnje od 20 sekundiSav sretan Marko je dočekao kraj ljeta, jer mu se posao s pakiranjem vreća baš i nije sviđao. Uostalom, 28. rujna im je rođendan! Roditelji su se htjeli poigrati s njihovim horoskopskim znakom (vaga) pa su im kupili
pet darova na koje su zalijepili cijene (u Kn) i rekli: "Tu su vam darovi. Raspodijelite ih međusobno tako da obojica dobijete što je moguće sličnije ukupne vrijednosti darova."Marko i Antonio su par dana mozgali i na kraju su uspjeli pravedno raspodijeliti darove.
Napišite program koji će izračunati najpravedniju raspodijelu darova. Nije bitno tko od blizanaca je dobio koliko i koje darove, već samo ukupne vrijednosti.
Ulazni podaci: cijene za pet darova
Izlazni podaci: ukupna vrijednost darova koje je dobio svaki od blizanaca
Npr.
ULAZ 9, 8, 3, 4, 1 IZLAZ 12 i 13
RJEŠENJE
DIM cijene(5)
FOR x = 1 TO 5
INPUT "Cijena dara: ", cijena(x)
NEXT x
FOR i = 1 TO 5
FOR j = 1 TO 4
IF cijena(j) < cijena(j + 1) THEN SWAP cijena(j), cijena(j + 1)
NEXT j
NEXT i
s1 = cijena(1)
s2 = 0
FOR x = 2 TO 5
IF s1 < s2 THEN s1 = s1 + cijena(x) ELSE s2 = s2 + cijena(x)
NEXT x
PRINT s1; " , "; s2
Evo za promjenu jednog rjesenja u Basicu. Darove mozemo podijeliti tako da najveci damo prvome, prvi manji damo drugome, a dalje dijelimo onome tko ima manje i to sve manje i manje vrijedne darove. Tako cemo sigurno najpravednije podijeliti darove, a jedini problem ostaje onda na pocetku sortiranje darova po vrijednosti.
3. ZADATAK
55 bodova, program mora dat
i rješenje za mnje od 10 sekundiJedan od darova koje je Antonio dobio, nakon što su raspodijelili darove, bila je knjiga “Computer Networks". U njoj je pronašao dobar štos kako natjerati Marka da konačno počne malo upotrebljavati mozak. Od sad nadalje ostavljat će Marku isključivo
šifrirane poruke i to metodom koju je pronašao u knjizi. Ključ za šifriranje je riječ sastavljena od različitih slova. Tekst koji se želi šifrirati upisuje se u retke ispod ključa (naravno bez razmaka, a ako na kraju ostane praznih mjesta upisuju se redom slova engleske abecede). Šifrirani tekst se dobije tako da se čitaju stupci po abecednom redu slova iz ključa. Antoniu ovo baš i nije bilo jasno pa je pogledao i primjer iz knjige:Ključ - "
megabuck"Tekst - "pleasetransfermilliondollarstomybankaccountnumbertwotwosix"
Postupak šifriranja :
M E G A B U C K - ključ
7 4 5 1 2 8 3 6 - redni brojevi slova
- - - - - - - -
p l e a s e t r
a n s f e r m i
l l i o n d o l
l a r s t o m y
b a n k a c c o
u n t n u m b e
r t w o t w o s
i x a b c d e f
Šifrirani tekst :
"afosknobsentautctmomcboelnlaantxesirntwarilyoesfpallburierdocmwd"
Međutim Antonio je shvatio da to baš i nije lagano raditi ‘pješke’ pa je zamolio vas da mu taj problem riješite računalom.
Ulazni podaci
Izlazni podaci: Izlazni podatak predstavlja šifrirani tekst kojeg treba upisati u datoteku IZLAZ.TXT.
Npr.
SIFRA.TXT
megabuck
pleasetransfermilliondollarstomybankaccountnumbertwotwosix
IZLAZ.TXT
afosknobsentautctmomcboelnlaantxesirntwarilyoesfpallburierdocmwd
RJEŠENJE
|
program sifriranje; var st, key, skey: string; ulaz, izlaz:text; procedure dodajslova; var o,x:integer; c:char; begin if length(key)>=length(st) then o:=length(key)-length(st) else begin x:=length(st); repeat dec(x,length(key)); until x<=length(key); o:=length(key)-x; end; if o>0 then begin c:='a'; repeat st:=st+c; dec(o); inc(c); until o=0; end; end; procedure sortkey; var i,j:integer; procedure swap(x,y:integer); var c:char; begin c:=skey[j]; skey[j]:=skey[j+1]; skey[j+1]:=c; end; begin for i:=1 to length(skey) do for j:=1 to length(skey)-1 do if skey[j]>skey[j+1] then swap(j,j+1); end;
procedure sifriraj; var m,x,y,i,j,ostatak:integer; polje:array[1..100,1..100] of char; begin m:=length(st) div length(key); i:=1; j:=0;
|
while i<=m do begin for x:=1 to length(key) do begin inc(j); polje[x,i]:=st[j]; end; inc(i); end; j:=0; for x:=1 to length(key) do begin i:=0; repeat inc(i); until key[i]=skey[x]; for y:=1 to m do begin write(izlaz,polje[i,y]); write(polje[i,y]); end; inc(j,m); end;
end;
begin assign(ulaz,'sifra.txt'); assign(izlaz,'izlaz.txt'); reset(ulaz); rewrite(izlaz);
readln(ulaz,key); readln(ulaz,st); skey:=key; sortkey; dodajslova; sifriraj;
close(ulaz); close(izlaz);
readln; end. |
4. ZADATAK
65 bodova, program mora dat
i rješenje za mnje od 5 sekundiMarko i Antonio su dobili i veliki komad papira (roditelji su baš našli što im pokloniti !?) te su došli na zgodnu ideju da od njega naprave papirnate zmajeve
. No u samom početku su se suočili s problemom koliko istih zmajeva mogu napraviti od tog komada papira.Napišite program koji će za
zadane dijagonale papirnatog zmaja i duljine stanica pravokutnog komada papira izračunati najveći mogući broj zmajeva.Papirnati zmaj sastoji se od četiri posebno izrezana trokuta, sva četiri pravokutna od kojih 2 jednakokračna kateta duljine
a i 2 trokuta duljina kateta a i b (kao na slici). Stranice platna neće prelaziti 1000.
Ulazni podaci:
Ulazni podaci čitaju se iz tekstualne datoteke ZMAJ.TXT koja sadrži dvaretka. U prvom retku su duljine stranica papira, dok su u drugom retku
duljine dijagonala, prvo vodoravne tj. 2*a te iza toga okomite tj. a+b.
Izlazni podaci: Program treba na ekran ispisati
najveći mogući broj zmajeva.
Npr.
ZMAJ.TXT
27 20
6 10
ISPIS
16
RJEŠENJE
|
#include <stdio.h> float x,y,a,b,t; void main() { FILE *f; int i,st,bm=0,bv=0,as=0; float stupci[100]; int mus[100], vus[100]; f=fopen("zmaj.txt","rt"); fscanf(f,"%f %f %f %f",&x,&y,&a,&b); fclose(f); if(x>y) {t=x;x=y;y=t;} a/=2; b-=a; st=x/a; bv=st*(int)(y/b); for (i=0;i<st;i++) { vus[i]=bv/st; stupci[i]=y-((bv/st)*b); mus[i]=(int)(stupci[i]/a); |
stupci[i]-=mus[i]*a; bm+=mus[i]; } while((bv>bm)&&(bv)) { if (as==st) as=0; if(vus[as]) { stupci[as]+=b; vus[as]--; bv--; t=(int)(stupci[as]/a); mus[as]+=t; stupci[as]-=t*a; bm+=t; as++; } } printf("%d\n",bv); } |