Ja radim u Pascalu,ali napiši ovde zadatak,da probam i ja da ga rešim,a usput i da ti pomognem.
Evo dao mi profesor zadatke,pa reko da vam postujem.
1.VIRAHANKA
Kod:
Virahanka je ime jednog starog indijskog matematičara.Virahanka se bavio rješavanjem problema mjerenja duži pomoću dva šablona različite dužine.Kraći šablon,čija je dužina jednaka 1 označavao je sa L,a duži je jednak dužini 2.Duži je označavao sa G.Postoji više načina na koje se može neke dužina predstaviti.
Primjer :
D=1 : L - 1 način
D=2 : LL,G - 2 načina
D=3 : LLL,LG,GL - 3 načina
D=4 : LLLL,LLG,LGL,GLL,GG - 5 načina
Iz priloženog možete da vidite da je za svaku sledeću duž,broj načina jednak zbiru zadnja 2 načina.
Fibonačijev nizDalje je lako...a ja to nisam uradio na takmičenju. :smajlikojisamsebeudarapotintari:
Evo mog koda:
Kod:
program virahanka;
type
niz=array[1..1000] of longint;
var
i,q,d:longint;
N:niz;
begin
readln (d);
for i:=1 to d do
begin
if i=1 then N[i]:=1
else
if i=2 then N[i]:=2
else
if i=3 then N[i]:=3
else
N[i]:=N[i-1]+N[i-2];
q:=N[i];
end;
writeln (q);
readln;
end.
2.SREĆA
Kod:
Pretpostavimo da je zadat neki prirodan broj.Ako se izračuna zbir kvadrata cifara tog broja dobije se novi prirodan broj.Postupak ponavljamo sve dok zbir ne postane 1.Tada kažemo da je taj broj srećan.Ako se ne može dobiti 1,tad taj broj nije srećan.
Program treba da odredi koji je najveći srećan broj do broja n koji se unosi,a da je istovremeno manji od unijetog broja.
Lagan zadatak,mnogi ga nisu uradili,nem' blage zašto,da li je zbog treme ili...
Uglavnom evo koda:
Kod:
program sreca;
function kvc(n:string):integer;
var
i,j,zb,br,a:longint;
begin
zb:=0;
begin
for i:=1 to length(n) do
begin
val(n[i],br,a);
zb:=zb+sqr(br);
end;
kvc:=zb;
end;
end;
var
i,j,k,x,n,max,zb,p:longint;
ul,il:text;
h,s:string;
begin
readln (n);
for i:=1 to n do
begin
k:=0;
str(i,s);
x:=kvc(s);
p:=x;
repeat
k:=k+1;
zb:=x;
str(zb,h);
x:=kvc(h);
until (zb=1) or (k>10);
if (zb=1) and (i>max) and (i<n) then max:=i;
end;
writeln (max);
readln;
end.
E sad pazite,vidite da sam ovaj brojac k stavio do 10.U zadatku piše da je vremensko ograničenje 2 sekunde,malo sam se snašao,pošto ima brojeva kojima treba i više transformacija da se vrate na staro,pa sam eto malo ograničio.Kad sam probao sa 100 000 trebalo mu je oko 5 sekundi da izračuna.Ovako,dosta brže.
3.KODER
Kod:
Frank Gray(da,da oni smorni uvodi u zadatak :) ) je fizičar poznat po brojnim unapređenjima u oblasti televizije.Patentirao je jedan binarni sistem,koji se po njemu naziva Grejov kod.To je sistem gdje se bilo koja dva uzastopna broja razlikuju u samo jednoj cifri.Danas se ovaj kod koristi za detekciju i korekciju grešaka u nekim TV sistemima.
Treba da se unese prirodan broj N(N<1000000) i K(K<25).Dakle program treba da koduje broj N, sa K bita
Lično mislim da je loše postavljen zadatak,jer recimo oni koji su ispod 3. razredaElektrotehničke/Tehničke/Saobraćajne škole nisu znali uraditi ovaj zadatak,kao ni svi Gimnazijalci.
Uglavnom,ovaj kolega što je osvojio 4. mjesto mi poslije objasnio kako ide ovo "kodovanje",kad sam vidio kako je lagano,malo falilo da se ne ubijem na licu mjesta.
Evo malo pojašnjeno,trebate da prvo ovaj broj pretvorite u binarni.
E sad prepišete prvu cifru binarnog,i onda sabirate s lijeva na desno.
Ako je 0+0=0 .
Ako je 0+1=1 .
Ako je 1+0=1 .
Ako je 1+1=0 .
To samo pretvorite u C/C++/Pascal i gotovo,to je bio čitav problem.
Kod :
Kod:
program koder;
var
t,grej,bin:string;
zb,l,g,br,i,j,n,k,x,x1:longint;
a:longint;
begin
writeln ('Prirodan broj koji treba konvertovati?');
readln (n);
writeln ('Koliko bitova?');
readln (k);
repeat
if n>=2 then br:=n mod 2 {konverzija dekadnog u binarni}
else br:=n;
n:=n div 2;
str(br,t);
bin:=t+bin; {ide t+bin,jer se rezultat zapisuje od dole,naprema gore}
until n=0;
l:=length(bin);
for i:=1 to l do
begin
if i>1 then
begin
val(bin[i],x,a); {konverzija stringa u broj}
val(bin[i-1],x1,a);
zb:=x+x1;
if zb=1 then t:='1' {granicni slucajevi}
else
if zb=0 then t:='0'
else
if zb=2 then t:='0';
grej:=grej+t;
end;
if i=1 then grej:=grej+bin[i];
end;
l:=length(grej); {dodavanje nula,odnosno bitova ako nema dovoljno}
if l<k then
begin
repeat
grej:='0'+grej;
l:=length(grej);
until l=k;
end;
writeln (grej);
readln;
end.
Malo sam pojasnio u samom kodu,da se ne pogubite.

4.PAKET
Kod:
Imamo kutije zapremine V.Na raspolaganju imamo M različitih vrsta predmeta,a svaki predmet karakteriša određena zapremina i cijena.Cilj je da kutiju popunimo svim raspoloživim predmetima i da ostvarimo najvredniji paket.
Ovaj još nisam uradio,a nisam se ni trudio poslije takmičenja,ovaj kod sam imao na takmičenju,pa ću ga svejedno postovati,inače radi samo ako mogu 2 predmeta da stanu.
Kod:
program pak;
type
paket=record
zapremina:integer;
cijena:integer;
end;
type
niz=array[1..100] of paket;
var
i,max,zb,k,v,m,j:integer;
ul,il:text;
N:niz;
begin
readln(v,m);
for i:=1 to m do
begin
readln (N[i].zapremina,N[i].cijena);
end;
begin
for i:=1 to m do
begin
for j:=1 to m do
begin
if N[i].zapremina+N[j].zapremina<=v then zb:=N[i].cijena+N[j].cijena;
if zb>max then max:=zb;
end;
end;
end;
writeln(max);
end.
Ulaz:
8 3 (zapremina i broj predmeta)
3 3 (lijevo zapremina-desno cijena)
4 5
5 8
Izlaz:
11
I zaista ovaj moj kod radi za ovaj primjer,ali...
5.RIBOLOV
Kod:
Duž neke rijeke postoji niz restorana.Svaki restoran karakteriše broj ulovljenih riba i broj kilometara udaljenih od izvora rijeke.
Ribe mogu da se raspodijele među restoranima.Tokom transporta na svakom kilometru se gubi po jedna riba.Treba da se odredi maksimalan broj osoba koje mogu da budu ugošćene.
Primjer:
ulaz:
3 (broj restorana)
1 0 (lijevo kilometri,desno ribe)
2 22
4 0
Izlaz:
6