This document discusses using Pythagoras' theorem to solve a problem involving a right triangle with one angle of 45 degrees. It mentions that the previous example can be done in another way, and applies Pythagoras' theorem to triangle ABC to solve it.
Prezentacija za predmet "Hemija" 7. razred - "Razdvajanje sastojaka smeše"
Mirjana Mirosavljević, dipl. hemičar, Osnovna škola "Sava Šumanović" - Erdevik
This document discusses using Pythagoras' theorem to solve a problem involving a right triangle with one angle of 45 degrees. It mentions that the previous example can be done in another way, and applies Pythagoras' theorem to triangle ABC to solve it.
Prezentacija za predmet "Hemija" 7. razred - "Razdvajanje sastojaka smeše"
Mirjana Mirosavljević, dipl. hemičar, Osnovna škola "Sava Šumanović" - Erdevik
Srbija od sticanja nezavisnosti 1878. do Majskog prevrata 1903.
Kombinatorika sa zadacima iz Programiranja
1. KOMBINATORIKA
Seminarski iz programiranja
Sadržaj
Kombinatotika uvod
Elementi kombinatorike
Binomni koeficijent
Permutacije,varijacije i kombinacije
Paskalov trougao
Katalanovi brojevi i
Pojam triangulacije poligona
Ogrlice
Fibonačijev niz
Zadaci
Literatura
Uvod
Kombinatorika je matematička disciplina koja se bavi problemima postojanja, prebrojavanja i
konstrukcije elemenata sa zadatim osobinama u konačnim skupovima.
Povezana je sa mnogim drugim granama matematike, poput algebre, teorije verovatnoće
i geometrije, kao i sa raznim oblastima u računarstvu i statističkoj fizici. Aspekti
kombinatorike uključuju prebrojavanje objekata koji zadovoljavaju određeni kriterijum,
određivanje da li neki kriterijum može biti ispunjen, konstruisanje i analiziranje objekata koji
ispunjavaju neki kriterijum, nalaženje najvećih, najmanjih ili optimalnih objekata, i
nalaženje algebarskih struktura u koje ovi objekti mogu spadati (algebarska kombinatorika).
Elementi kombinatorike
Prebrojavanje elemenata
Broj elemenata nekog skupa A naziva se KARDINALNOST skupa A i obeležava se sa:
| 𝐴| = 𝑐𝑎𝑟𝑑( 𝐴) = 𝐴̅
2. Svojstva
1. | 𝐴| = 𝑛 ⇒ | 𝑃(𝐴)| = 2 𝑛
gde P(A) predstavlja partitivni skup skupa A odnosno skup
koji se sastoji od svih razlicitih podskupova skupa A a njihov broj jednak je 2 𝑛
.
2. | 𝐴| = 𝑛 𝑖 | 𝐵| = 𝑚 ⇒ | 𝐴 × 𝐵| = 𝑛 ∙ 𝑚
3. | 𝐴 ∪ 𝐵| = | 𝐴| + | 𝐵| − | 𝐴 ∩ 𝐵|
4. | 𝐴 ∪ 𝐵 ∪ 𝐶| = | 𝐴| + | 𝐵| + | 𝐶| − | 𝐴 ∩ 𝐵| − | 𝐵 ∩ 𝐶| − | 𝐴 ∩ 𝐶| + | 𝐴 ∩ 𝐵 ∩ 𝐶|
← | 𝐴 ∪ 𝐵 ∪ 𝐶|
5. | 𝐴1| = 𝑚1,| 𝐴2| = 𝑚2 … | 𝐴 𝑘| = 𝑚 𝑘 ⇒ | 𝐴1 × 𝐴2 × … × 𝐴 𝑘| = 𝑚1 ∙ 𝑚2 ∙ … ∙ 𝑚2
6. | 𝐴| = 𝑛 | 𝐵| = 𝑚
Broj preslikavanja skupa A u skup B ima 𝑚 𝑛
𝑓 = (
𝑎1
𝑚
𝑎2
𝑚
…
𝑎 𝑛
𝑚
)
Primer:
𝐴 = {1,2} 𝐵 = {3,4,5}
𝑓: (
1
3
2
3
) 𝑓: (
1
3
2
4
) 𝑓: (
1
4
2
3
) 𝑓: (
1
4
2
4
) 𝑓: (
1
4
2
5
)
𝑓: (
1
5
2
4
) 𝑓: (
1
5
2
5
) 𝑓: (
1
3
2
5
) 𝑓: (
1
5
2
3
)
| 𝐴| = 2 | 𝐵| = 3 32
= 9
7. Binarnih relacija na skupu A od n elemenata ima 𝑛2
| 𝐴| = 𝑛
| 𝐴× 𝐴| = 𝑛2
| 𝑃(𝐴× 𝐴)| = 2 𝑛2
Osnovni kombinatorni principi na kojima se zasnivaju skoro sva prebrojavanja su:
- princip jednakosti: Za konačne skupove A i B i bijekciju f : A → B, važi |A| = |B|,
- princip zbira: za disjunktne i konačne skupove A i B važi |A ∪ B| = |A| + |B|.
- princip proizvoda: Za konačne skupove A i B važi |A ×B| = |A| · |B|.
3. Binomni koeficijent
Binomni koeficijent 𝐶 𝑛
𝑘
je broj razlicitih nacina da se nasumice izabere k od ukupno n
predmeta bez obzira na raspored predmeta po setovima odnosno njihovu nesredjenost.
U matematici, a posebno u kombinatorici, binomni koeficijent broja n i celog broja k
definisan je kao:
(
𝑛
𝑘
) =
𝑛!
𝑘! ( 𝑛 − 𝑘)!
= ∏
𝑛 + 1 − 𝑖
𝑖
, 𝑛 ≥ 𝑘 ≥ 0
𝑘
𝑖=1
𝑖 (
𝑛
𝑘
) = 0 𝑎𝑘𝑜 𝑗𝑒 𝑘 < 0 𝑖𝑙𝑖 𝑘 > 𝑛
Prema Nikolasu Higamu, notaciju ( 𝑛
𝑘
) je uveo u upotrebu Albert fon Etinghauzen 1826, iako
se za ove brojeve znalo vekovima pre toga (Paskalov trougao).
Binomni koeficijenti su koeficijenti u razvoju binoma (x + y)n (odatle i naziv):
(𝑎 + 𝑏) 𝑛
= ∑ (
𝑛
𝑘
) 𝑎 𝑘
𝑏 𝑛−𝑘
𝑛
𝑘=0
𝑜𝑑𝑛𝑜𝑠𝑛𝑜 (𝑎+ 𝑏) 𝑛
= 𝐶 𝑛
0
𝑎 𝑛
+𝐶 𝑛
1
𝑎 𝑛−1
𝑏 + 𝐶 𝑛
2
𝑎 𝑛−2
𝑏 + ⋯+ 𝐶 𝑛
𝑛
𝑏 𝑛
Ovo je generalizovano binomnom teoremom koja dozvoljava da n bude negativan ili realan
broj.
Permutacije
Permutacije mogu da budu bez ponavljanja i sa ponavljanjem. Bez ponavljanja znači da su
svi elementi u početnom skupu različiti, dok permutacija sa ponavljanjem znači da neki
elementi mogu da se javljaju više puta.
Broj permutacija računamo po formuli:
𝑃 = 𝑛!
gde je n broj elemenata skupa koji mogu biti izabrani.
Ako između n zadanih elemenata ima 𝑘1 jednakih jedne vrste, 𝑘2 jednakih druge vrste,
..., 𝑘 𝑟 jednakih r-te vrste, govorimo o permutacijama s ponavljanjem.
Broj permutacija s ponavljanjem od n elemenata jednak je:
𝑃𝑛
𝑘1,𝑘2,…,𝑘 𝑟
=
𝑛!
𝑘1!∙𝑘2!∙…∙𝑘 𝑟!
4. Procedura koja generiše permutacije sa ponavljanjem:
(izracunava broj permutacija sa ponavljanjem i stampa sve kombinacije
ukoliko je potrebno)
Varijacije
program permp (input,output);
type niz = array [1..20] of char;
var a, ta : niz;
p: array [1..20] of Boolean;
j,n,b: integer;
odg: Boolean;
odgt: char;
procedure stampa;
var i:integer;
begin
b:=b+1;
if odg then begin
for i:=1 to n do write(ta[i]);
writeln;
end;
end;
procedure perm(i,m: integer);
var j,k: integer;
begin
if i<=n then
begin
k:=1;
if i>1 then if a[i]=a[i-1] then k:=m;
for j:=k to n do begin
if p[j] then begin
ta[j]:=a[i];
p[j]:=false;
perm(i+1,j+1);
p[j]:=true;
end;
end; end
else
stampa;
end;
begin
write ('Koliko elemenata: ');
readln (n);
write ('Unesite elemente tako da oni');
writeln ('koji se ponavljaju budu sukcesivni');
b:=0;
for j:=1 to n do
begin
readln(a[j]);
p[j]:=true
end;
write ('Zelite li ispis? ');
readln (odgt);
odg:= not ((odgt='N') or (odgt='n'));
perm(1,1);
writeln ('Ukupno: ', b);
end.
5. Varijacije
Pretpostavimo da u jednom odeljenju od 25 učenika treba da izaberemo predsednika,
sekretara i blagajnika. Dakle, od 25 učenika treba da odaberemo 3 i pritom je važno ko je
predsednik, ko sekretar a ko blagajnik u odeljenju. Na koliko načina možemo napraviti ovaj
izbor.
Ovde su u pitanju varijacije. Od 25 učenika u odeljenju mi biramo samo 3, pa nisu svi učenici
izabrani. Takođe, važno je koga ćemo izabrati za predsednika, koga za sekretara a koga za
blagajnike, odnosno, bitan je poredak našeg izbora.
Varijacije takođe mogu da budu sa i bez ponavljanja. Ako od n početnih elemenata biramo
njih r, dobijamo varijacije od n elemenata r-te klase njihov broj označavamo kao 𝑉𝑛
𝑟
Broj varijacija računamo po formuli:
𝑉𝑛
𝑟
= 𝑛( 𝑛 − 1)( 𝑛 − 2)… ( 𝑛 − 𝑟 + 1) =
𝑛!
( 𝑛 − 𝑟)!
= 𝐶 𝑛
𝑟
𝑟!
U slučaju varijacija sa ponavljanjem imamo formulu:
𝑉𝑛
𝑟̅̅̅̅ = 𝑛 𝑟
gde je n broj elemenata skupa koji mogu biti izabrani, a r broj elemenata koji treba da
budu izabrani.
Primer : Katanac sa šifrom ima 4 koluta, a na svakom kolutu 10 slova abecede. Na koliko se
načina može izabrati šifra za katanac?
Traženi broj jednak je broju varijacija s ponavljanjem od
30 elemenata 4. reda:
𝑉30
4̅̅̅̅ = 304
= 810000
Šifra za katanac može se izabrati na 810000 načina.
Ili, prema principu uzastopnog prebrojavanja traženi broj možemo dobiti ovako:
prvo slovo možemo odabrati na 30 načina (bilo koje slovo naše abecede),
drugo slovo također na 30 načina (slova mogu biti i ista tj. mogu se ponavljati), treće na
30 načina i četvrto takođe na 30 načina.
Dakle, šifra za katanac može se izabrati na 30 ∙ 30 ∙ 30 ∙ 30 = 810000 načina.
6. Kombinacije
Primer:
Pretpostavimo sada da o jednom odeljenju od 25 učenika treba odabrati pet predstavnika za
Učenički parlament. U ovom slučaju ne mogu svi učenici da budu izabrani (jer od njih 25
biramo samo 5), a poredak nije bitan (jer oba člana parlamenta imaju jednake funkcije).
Kombinacije bez ponavljanja od n elemenata r -te klase obeležavamo sa 𝐶 𝑛
𝑟
i računamo po
formuli:
𝐶 𝑛
𝑟
=
𝑛!
𝑟! ( 𝑛 − 𝑟)!
= 𝐶 𝑛
𝑛−𝑟
Kombinacije sa ponavljanjem članova skupa:
𝐶 𝑛
𝑟̅̅̅ =
(𝑛 + 𝑟 − 1)!
𝑟! ( 𝑛 − 1)!
= 𝐶 𝑛+𝑟−1
𝑟
= 𝐶 𝑛+𝑟−1
𝑛−1
gde je n broj elemenata skupa koji mogu biti izabrani, a r broj elemenata koji treba da budu izabrani.
Primer : U prodavnici se mogu kupiti banane, jabuke i kruške. Na koliko načina možemo
kupiti 2 kg voća ako možemo kupiti po kilogram ponuđenog voća?
Možemo kupiti 2 kg voća (r=2). U ponudi su: banane, jabuke, kruške (n=3).
Poredak odabranog voća nije bitan, a možemo birati i samo jednu vrstu voća
(elementi se mogu ponavljati).
Traženi broj je broj kombinacija s ponavljanjem od 3 elementa 2. reda:
𝐾3
2̅̅̅̅ = (
3 + 2 − 1
2
) =
4!
2! ∙ 2!
= 6
Primer 2: U cvećari se prodaju mini ruže, bele rade i ljiljani. Na koliko načina je moguće
napraviti buket od 9 cvetova?
U ponudi su 3 vrste cveća (n=3), formiramo buket od 9 cvetova (r=9), možemo
birati ponovo istu vrstu cveća. Buket možemo napraviti na
𝐾3
9̅̅̅̅ = (
9 + 3 − 1
9
) =
11!
9! ∙ 2!
= 55
načina.
7. ZAKLJUČCI
Sve gore navedeno možemo smestitiu jednu tabelu:
Da li su izabrani svi
elementi početnog
skupa?
Da li je bitan poredak
među izabranim
elementima?
Formule za računanje
PERMUTACIJE
DA DA
Bez ponavljanja
𝑃 = 𝑛!
Sa ponavljanjem
𝑃𝑛
𝑘1,𝑘2,…,𝑘 𝑟
=
𝑛!
𝑘1!∙𝑘2!∙…∙𝑘 𝑟!
VARIJACIJE NE DA
Bez ponavljanja
𝑉𝑛
𝑟
=
𝑛!
( 𝑛 − 𝑟)!
Sa ponavljanjem
𝑉𝑛
𝑟̅̅̅̅ = 𝑛 𝑟
KOMBINACIJE
NE NE
Bez ponavljanja
𝐶 𝑛
𝑟
=
𝑛!
𝑟! ( 𝑛 − 𝑟)!
Sa ponavljanjem
𝐶 𝑛
𝑟̅̅̅ =
(𝑛 + 𝑟 − 1)!
𝑟! ( 𝑛 − 1)!
8. Paskalov trougao
Važna rekurzivna relacija
C(n,k)+C(n,k+1)=C(n+1,k+1)
sledi direktno iz definicije binomnog koeficijenta. Ovom relacijom, i matematičkom
indukcijom se može dokazati da je C(n,k) prirodni broj, za svako n i k (što nije najočiglednije
odmah iz definicije).
Na taj nacin se konstruise paskalov trougao:
red 1 1
red 2 1 1
red 3 1 2 1
red 4 1 3 3 1
red 5 1 4 6 4 1
red 6 1 5 10 10 5 1
red 7 1 6 15 20 15 6 1
red 8 1 7 21 35 35 21 7 1
red 9 1 8 28 56 70 56 28 8 1
Ponavljanje formula: (koja je povezana s Pascalovim trouglom):
𝐶 𝑛
𝑘
= 𝐶 𝑛−1
𝑘−1
+ 𝐶 𝑛−1
𝑘
Binomni koeficijenti su od velike važnosti u kombinatorici jer nude gotove formule za česte
probleme prebrojavanja:
Svaki skup sa n poseduje tačno ( 𝑛
𝑘
) različitih podskupova koji imaju k elemenata
Broj binarnih brojeva dužine n koje sadrže k jedinica i n − k nula je ( 𝑛
𝑘
).
Broj binarnih brojeva koji sadrže k jedinica i n nula tako da nikoje dve nisu susedne
je ( 𝑛+1
𝑘
).
Broj različitih sekvenci od n prirodnih brojeva čiji je ukupni zbir k je ( 𝑛+𝑘−1
𝑘
); ovo je
takođe broj različitih načina da se iz skupa sa n elemenata izabere k elemenata ukoliko je
dozvoljeno ponavljanje.
10. Moze se zamisliti kao o izboru n ljudi iz grupe od 2n(Mozemo izabrati k ljudi iz jedne i n-k ljudi
iz 2. grupe. Ovo radimo za k=1,2,…n.)
Pondirani zbir:
1𝐶 𝑛
1
+ 2𝐶 𝑛
2
+ ⋯+ 𝑛𝐶 𝑛
𝑛
= 𝑛2 𝑛−1
Dokaz:
Mozemo dokazati pomoću matematičke indukcije. Za n = 1, nije potrebno dokazivati jer je
onda n=k pa će leva strana svakako biti jednaka desnoj=1:
(2) indukcijska pretpostavka:
C(k, 1) + 2·C(k, 2) + 3·C(k, 3) + ... + k·C(k, k) = k2k-1.
Ako levu stranu ip.(2) označimo sa S(k), i iskoristimo adicionu formulu za k+1 dobijamo:
S(k+1) = C(k+1, 1) + 2·C(k+1, 2) + 3·C(k+1, 3) + ... + (k+1)·C(k+1, k+1)
= 1·(C(k, 0) + C(k, 1)) + 2·(C(k, 1) + C(k, 2)) + ... + k·(C(k, k-1) + C(k, k)) +
(k+1)C(k, k)
= 1·C(k, 0) + 3·C(k, 1) + 5·C(k, 2) + ... + (2k+1)C(k, k)
= (C(k, 0) + C(k, 1) + C(k, 2) + ... + C(k, k)) + 2·S(k)
= 2k + 2·k·2k-1
= (k + 1)·2k.
Zbir sa Fibonacijevim brojevima:
𝐶 𝑛
0
+ 𝐶 𝑛−1
1
+ ⋯ + 𝐶 𝑛−𝑘
𝑘
+ ⋯+ 𝐶0
𝑛
= 𝐹𝑛 +1
Dokaz:
Dijagonalnim sabiranjem brojeva iz Paskalovog trougla dobijamo Fibonaccijev niz.
11. Katalanovi brojevi
Katalanovi brojevi (Cn) predstavljaju niz brojeva koji se prvenstveno koriste u geometriji, ali
se ovaj niz pojavljuje i kao rešenje velikog broja kombinatornih problema. Prvi put ih je
otkrio Leonard Ojler (Leonhard Euler, 1707-1783) tražeći opšte rešenje za broj različitih
načina na koji se jedan mnogougao može podeliti na trouglove. Pritom je trebalo voditi računa
da se ne koriste dijagonale mnogougla koje se međusobno seku.
Međutim, ovi brojevi su ipak dobili ime po belgijskom matematičaru Ežen Sarl Katalanu
(Eugene Charles Catalan, 1814–1894) koji je otkrio vezu između ovih brojeva i problema
korektnih nizova n parova zagrada.
Katalanovi brojevi se izraunavaju po sledećoj formuli [39]:
𝐶 𝑛 =
1
𝑛 + 1
𝐶2𝑛
𝑛
=
(2𝑛)!
( 𝑛 + 1)! 𝑛!
, 𝑧 𝑎 𝑛 ≥ 0
gde važi da je n broj trouglova na koje se može podeliti dati poligon. Cesto se koristi i sledeći
alternativni izraz za definiciju Katalanovih brojeva:
(
2𝑛
𝑛
) − (
2𝑛
𝑛 + 1
) =
(2𝑛)!
( 𝑛!)2
−
(2𝑛)!
( 𝑛 − 1)!( 𝑛 + 1)!
=
(2𝑛)!
𝑛! ( 𝑛 + 1)!
= 𝐶 𝑛
𝑜𝑑𝑛𝑜𝑠𝑛𝑜 𝐶 𝑛 = 𝐶2𝑛
𝑛
− 𝐶2𝑛
𝑛−1
, 𝑧𝑎 𝑛 ≥ 0
Rekurzivna formula
Katalonovi brojevi zadovoljavaju rekurziju:
𝐶0 = 1, 𝐶 𝑛+1 = ∑ 𝐶𝑖
𝑛
𝑖=0
𝐶 𝑛−𝑖 𝑧𝑎 𝑛 ≥ 0
𝑜𝑑𝑛𝑜𝑠𝑛𝑜 𝐶𝑛 = ∑ 𝐶𝑖
𝑛−1
𝑖=0
𝐶 𝑛−1−𝑖
𝑎 𝑝𝑜š𝑡𝑜 𝑗𝑒 𝐶2𝑛
𝑛
= ∑(𝐶 𝑛
𝑖
)2
𝑛
𝑖=0
, 𝑜𝑛𝑑𝑎 𝑗𝑒: 𝐶 𝑛 =
1
𝑛 + 1
∑(𝐶 𝑛
𝑖
)2
𝑛
𝑖=0
Katalonovi brojevi zadovoljavaju i sledeću rekurziju:
𝐶0 = 1, 𝐶 𝑛+1 =
2(2𝑛 + 1)
𝑛 + 2
𝐶 𝑛
12. Svojstva
Generirajuća funkcija Katalanovih brojeva je:
∑ 𝐶 𝑛
∞
𝑛=0
𝑧 𝑛
=
1 − √1 − 4𝑧
2𝑧
Asimptotska vrednost je:
𝐶 𝑛~
4 𝑛
𝑛3 2⁄
√ 𝜋
Katalanovi brojevi se još mogu izraziti i Segnerovom rekurzivnom formulom kao i
Bertrandovom ballot teoremom. Tabela sadrži Katalanove brojeve za vrednosti n ∈ {1, 2,
..., 30}, koji se izračunavaju po formuli.
Primena
Pojam triangulacije poligona
Triangulacija poligona je istorijski veoma star problem koji je doveo do otkrića Katalanovih
brojeva. Pri određivanju svih triangulacija poligona mora biti razmotren i oblik poligona. Ovo
čini problem izračunavanja veoma teškim. Problem može biti smanjen tako što se
ograničavamo na proračune vezane za konveksne poligone. Za konveksne poligone sve
dijagonale su uvek unutrašnje dijagonale. U ovom slučaju broj triangulacija konveksnog
poligona je nezavisan od oblika i može biti jedinstveno okarakterisan brojem temena n.
Pod triangulacijom konveksnog poligona podrazumevamo razlaganje unutrašnjosti poligona
na trouglove, međusobno nepresecajućim unutrašnjim dijagonalama. Kod ovog problema se
zapravo razmatra broj triangulacija, gde je moguća maksimalna podela konveksnog poligona
na n − 2 trougla. Na slici su predstavljeni neki načini rešavanja ovog problema.
13. Triangulacija poligona sa n temena zahteva podelu na trouglove sa n − 3 unutrašnjih
dijagonala koje se ne ukrštaju.
Primer 2
Potpuno binarno stablo, gde svaki otac ima najviše dva sina može da predstavlja primer za
Katalanove brojeve. Katalanov broj 𝐶 𝑛 je broj potpunih binarnih stabala sa n+1 listom.
Ogrlice
Problem "ogrlice" - jedan je od klasičnih problema u kombinatorici. Potrebno je izračunati
koliko postoji različitih ogrlica od n kuglica, od kojih svaka može biti jedne od k boja. Ogrlica
se moze rotirari (ciklicno pomerati) ali se ne sme menjati njihov redosled u ogrlici.
Rešenje
U ovom zadatku, odmah možemo naći neku grupu invarijantne permutacije. Očigledno je da
će se sastojati od n permutacija:
𝜋0 = 1 2 3 . . . 𝑛
𝜋1 = 2 3 . . . 𝑛 1
𝜋2 = 3 . . . 𝑛 1 2
. . .
𝜋 𝑛−1 = 𝑛 1 2 . . .(𝑛 − 1)
14. Hajde da nadjemo eksplicitnu formulu za izračunavanje 𝐶(𝜋𝑖). Možemo zaključiti da je i – ta
permutacija na j-tom mestu jednaka i+j (po modulu n ako je zbir veći od n) ali ako u obzir
uzmemo strukture i-tih permutacija, mozemo videti da se u njima pojavljuje jedinica 1+i koja
zatim prelazi u 1+2i, pa 1+3i i tako dalje sve do 1+kn. Odatle mozemo zakljuciti da svi ciklusi
imaju iste dužine koje su jednake nzd(i,n)/i, odnosno n/nzs(i,n). Tada će broj ciklusa do i-te
permutacije biti nzs(i,n)
Zamenom ovih vrednosti u Polyevoj teoremi dobijamo:
𝐴𝑛𝑠 =
1
𝑛
∑ 𝑘 𝑛𝑧𝑠(𝑖,𝑛)
𝑛
𝑖=1
Fibonačijev niz
Fibonačijev niz je matematički niz primećen u mnogim fizičkim, hemijskim i biološkim
pojavama. Početkom XIII veka Leonardo Fibonacci (1180-1240) je upoznao Evropu sa
radovima indijsko-arapskih matematičara, a time neposredno i kineskih. On je u svojoj
raspravi Liber abaci 1202. godine izložio praktičan aritmetički problem:
˝Koliko pari zečeva će reprodukovati jedan par za godinu dana ako se pretpostavi da svakog
meseca jedan par rodi novi par koji za dva meseca postane reproduktivan?˝
Zanimljiv je redosled brojeva do kojeg je došao proučavajući razmnožavanje zečeva.
Rešavanjem ovog zadatka dobio je niz brojeva na sledeći način: prvog meseca eksperiment
počinje jednim parom zečeva, u drugom mesecu će postojati samo taj jedan par, u trećem
mesecu će ih biti 2, u četvrtom 3, u petom 5, u šestom 8 itd.
Ovom nizu brojeva je francuski matematičar Edvard Lucas (1842-1891) dao ime
Fifonaccijevi brojevi i otkrio njihove važne primene.
Fibonaccijevi brojevi ili, kako ih često nazivamo, Fibonaccijev niz je vrsta rekurzivnog niza u
kojem zbir dva prethodna člana daje sledeći broj.
Oznaka člana u nizu F1 F2 F3 F4 F5 F6 F7
Fibonaccijev niz 1 1 2 3 5 8 13
Fibonaccijevi brojevi su najjednostavnija vrsta rekurzivnog niza. U ovom rekurzivnom nizu
za formiranje n-tog člana reda moramo znati dva člana koji mu prethode. Dakle, za
poznavanje ovog niza su najvažnija prva dva člana F1 i F2, jer se ostali članovi mogu dobiti iz
relecije:
𝑓1 = 1 𝑓2 = 1
𝑓𝑛 = 𝑓𝑛−1+𝑓𝑛−2, 𝑛 ≥ 2
Što se tiče rekurzivne funkcije za odredjivanje n-tog člana ovog niza, ona bi glasila ovako:
15. function fib(n:longint):longint;
begin
if n=0 then fib:=0;
if n<=2 then fib:=1
else fib:=fib(n-1)+fib(n-2);
end;
Zadaci
Igra sa brojevima (www.spoj.com/problems)
Mali Ciko voli da igra sledeću igru sa brojevima:
1. On izabere broj N i skup od K prirodnih brojeva
2. Zatim ispiše sve brojeve od 1 do N
3. Izabere prvi od K brojeva iz skupa i poništava sve brojeve od 1 do N koji su njime
deljivi ukljucujuci i sam broj
4. Ponavlja korak 3 za sve brojeve iz skupa
Jednog dana mali Ciko je bio raspoložen igra ovu igru sa svojim bratom. Medjum njegov brat
je zakomplikovao igru tako što je uveo jos jedan korak i zamolio ga da sazna broj celih
brojeva koji nisu poništeni na kraju igre a on sada traži vašu pomoć..
Unos: 10, 3
2, 4, 5
Ispis: 4
( brojevi 1, 3, 7, 9 nisu izbrisani)
program p1;
var a,b:array[1..100] of longint;
n,k,i,j,s:longint;
begin
read(n,k);
for i:=1 to k do
read(a[i]);
for j:=1 to n do begin
b[j]:=j;
for i:=1 to k do
if (b[j]>0) and (b[j] mod a[i]=0) then
b[j]:=0;
end;
for i:= 1 to n do
if b[i]>0 then s:=s+1;
write(s);
end.
16. Timovi (codeforces #478b)
n učesnika takmičenja podeljeno je u m timova na neki način tako da svaka
ekipa ima najmanje jednog takmičara. Nakon takmičenja, svaki par učesnika
iz iste ekipe se sprijateljio.
Potrebno je pronaći minimalan i maksimalan broj parova prijatelja koji može biti formiran do
kraja takmičenja.
Program p1;
var m,n,a,b,min,max:int64;
begin
read(n,m);
a:=n div m;
b:=n mod m;
min:= (a-1)*a div 2*(m-b)+a*(a+1) div 2*b;
max:= ((n-m+1)*(n-m)) div 2
write(min,' ',max);
end.
Sofi i cveće (codeforces #322b)
Sofi ima cveće: p crvenih, q zelenih i r plavih cvetova. Ona treba da napravi bukete od ovog
cveća i to na 4 načina:
Crveni buket sastoji se od 3 crvena, plavi od 3 plava, zeleni od 3 zelena a mešani buket od
po 1 crvenog, plavog i zelenog cveta. Potrebno je odrediti maksimalan broj buketa koje Sofi
može da napravi.
Unos: 4, 4, 4
Ispis: 4
Unos: 2: 3, 6, 9
Ispis:6
Program p;
var s,i,max,ans,x,y,z,l,k,m,n:longint;
begin
read(x,y,z);
for s:=3 downto 0 do
if (x-s>=0) and (y-s>=0) and (z-s>=0) then
begin
ans:=s+(x-s) div 3+(y-s) div 3+(z-s) div 3;
if (ans>max) then max:=ans;
end;
writeln(max);
end.
17. Svemirski kod(www.spoj.com/problems)
Stanko voli svemirska putovanja, ali on je siromasan programer i nikada neće moći da kupi
svoju svemirsku letelicu. Zato je odlučio da je ukrade od Petra. Medjutim, postoji jedan
problem-Petru je letelica zaključana šifrom na osnovu broja zvezda iz galaksije Mlečnog puta.
Za razbijanje ovog sistema Stanko mora da proveri svaki podskup od četri zvezde čiji je
zajednički delilac 1..
Srećom, on je uspeo da ograniči broj zvezda na n. Pomozite mu da pronadje koliko postoji
ovakvih sistema?
Ulaz
U prvoj liniji ulaza tat je broj n<10000 dok se druga linija sastoji od maticnih brojeva svake
od n zvezda..
Unos Izlaz
4
2 3 4 5 1
4
2 4 6 8 0
7
2 3 4 5 6 7 8 34
Program p1;
var n,i,j,k,l,p,s:longint;
a:array[1..1000] of longint;
begin
read(n);
for i:=1 to n do read(a[i]);
for i:=1 to n-3 do
for j:=i+1 to n-2 do
for k:=j+1 to n-1 do
for l:=k+1 to n do
for p:=2 to a[i] do begin
if (a[i] mod p=0) and (a[j] mod p=0) and
(a[k] mod p=0) and (a[l] mod p=0) then
break
else if p=a[i] then s:=s+1;
end;
write(s, ' ');
end.
18. ZADATAK: Naš mali Draganče se našao u nevolji. Pre par nedelja se dogovorio sa
drugarima da na leto ide na more u Abenishbe, ali je ubrzo shvatio da nema dovoljno para. Pa
je odlučio da se zaposli i da zaradi te pare. Pošto ga niko nije shvatio ozbiljno da sa 10 godina
ume da programira, morao je da se zaposli na nekom mnogo manje zanimljivom mestu - u
prodavnici nakita. U toj prodavnici imaju jako veliki izbor - ogrlice, minđušhe, narukvice,
prstenje... Našem malom Dragančetu za oko su posebno zapale ogrlice od perli. Perle su
poređane u krug, i sa nekih perli iz kruga visi još po jedna niska perli. Svake dve susedne
perle su povezane malim konchićem (i sa kruga i sa niski). Draganče je primetio da je ogrlica
jako uska, tako da retko koja mušterija može da je stavi oko vrata, tako da i oni kojima se
svidi, odustanu posle probavanja. Draganče je smislio kako da reši problem! Makazama će
preseći jedan končić (koji spaja dve perle sa kruga), i neke dve perle će da spoji končićem.
Tako će da dobije ogrlicu istog tipa - krug sa visećim niskama perli. Poshto već par nedelja
nije ništa programirao, jer svaki dan sedi u prodavnici, zamolio vas je da mu pomognete, i
izračunate koliki najveći krug na ogrlici može da dobije, sa jednim sečenjem i jednim
spajanjem. Naravno, kada bi znao najveći krug, mogao bi svakoj ogrlici da poveća krug, i
samim tim poveća broj mušterija.
Ulaz:
(Ulazni podaci se nalaze u datoteci ogrlica.in) U prvom redu ulazne datoteke se nalazi
broj n (n≤ 500000) koji predstavlja broj perli na krugu. U sledećem redu su dva
broja, k i m (k≤ 10000, m≤ 10000000). U sledećih k redova se nalazi po jedan ceo broj
niza xi (xi≤ 2*m). Niz ai izračunajte koristeći doele navedeni segment programa
(niz xi ima k elemenata i njhovi indeksi su od 0 do k-1, a ai ima n elemenata i njihovi indeksi
su od 0 do n-1):
Za Pascal programere bi segment imao sledeći izgled:
j := 0;
for i := 0 to n-1 do begin
a[i] := x[j];
s := (j+1) mod k;
x[j] := ((x[j] xor x[s]) + 13) mod m;
j := s;
end;
U ovom kodu je xor oznaka za bitovnu eksluzivnu disjunkciju koja postoji kao operacija u
Rascal-u. Broj ai predstavlja broj perli u niski ispod i-te perle na krugu. Rešenje ne zavisi od
gornje formule, u njoj ne postoje zavisnosti koje bi vam pomogle u rešavanju. Ona služi da
ulazna datoteka ne bude prevelika, da bi mogla da se učita u vremenskom ograničenju.
Izlaz:
(Izlazne podatke upisati u datoteku ogrlica.out) U prvi red izlazne datoteke ispisati jedan ceo
broj - broj perli u najvećem krugu koji se može dobiti jednim sečenjem i jednim spajanjem
dve perle date ogrlice.
Primer 1:
ogrlica.in ogrlica.out
12
12 5
3,0,3,2,2,0,2,0,1,0,1
17
,0
Objašnjenje:
Ogrlica je prikazana na slici ispod odgovora. Nizovi x i a su identični. Ako presečemo između
2. i 3. perle sa kruga, i spojimo poslednje perle iz niski ispod 2. i 3. perle, dobijamo dužinu 12
+ 3 + 2 = 17
19. #include <stdio.h>
const int maxn = 1000000;
int x[200];
int a[maxn];
int best[2*maxn];
int koji[2*maxn];
void gen(int* x, int k, int* p, int n, int m) {
int i,j = 0;
for (i = 0; i < n; i++) {
a[i] = x[j];
printf("niz %dn", a[i]);
int s = (j+1) % k;
x[j] = ((x[j] ^ x[s]) + 13) % m;
j = s;
}
}
int main() {
int i,j,k,n,m,poc,kraj,res;
freopen("ogrlica.in","r",stdin);
freopen("ogrlica.out","w",stdout);
scanf("%d", &n);
scanf("%d %d", &k, &m);
for (i=0;i<k;i++)
scanf("%d", &(x[i]));
gen(x,k,a,n,m);
best[0] = n + a[0];
koji[0] = 0;
poc = 0;
kraj = 0;
for (i=1;i<n;i++)
{
while (kraj >=poc && best[kraj]<n-i+a[i])
kraj--;
kraj++;
best[kraj] = n-i+a[i];
koji[kraj] = i;
}
res = a[n-1] + best[poc];
for (i = 0;i<n;i++)
{
if (koji[poc]==i)
poc++;
while (kraj >=poc && best[kraj]<-i+a[i])
kraj--;
kraj++;
best[kraj] = -i+a[i];
koji[kraj] = i;
int tr = a[i] + i + 1 + best[poc];
res = res>tr?res:tr;
}
printf("%dn", res);
return 0;
}
20. Pečat
Data je matrica n*m koja je popunjena crnim i belim poljima. Odrediti koliko ce biti crnih
polja nakon sto se pecat redom udari k puta po glavnoj dijagonali.
Odrediti n-ti clan fibonacijevog niza:
Odrediti n-ti katalanovbroj: (𝐶 𝑛 = 𝐶2𝑛
𝑛
− 𝐶2𝑛
𝑛−1
)
:
program p1;
type niz=array[1..100,1..100] of integer;
var a:niz; p,k,m,n,i,j,o,q:integer;
begin
read(n,m,k);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
p:=0;
for i:=1 to n do
for j:=1 to m do
if (a[i,j]=1) and ((i=1) or (j=1)) then
p:=p+k
else if (a[i,j]=1) then begin
q:=0;
o:=0;
repeat
q:=q+1;
if (a[i,j]=a[i-q,j-q]) then o:=o+1;
until (i-q=0) or (j-q=0) or (a[i,j]=a[i-q,j-q]);
if (o=0)
then p:=p+k
else if (o=1) and (q=1) then p:=p+1
else if (q>k) then p:=p+k
else if (q>1) then p:=p+q;
end;
writeln(p);
end.
program p1;
var n:integer;
function fib(n:integer):integer;
begin
if n<=2 then fib:=1
else fib:=fib(n-1)+fib(n-2);
end;
begin
read(n);
write (fib(n));
end.
function aa(n:longint):int64;
begin
if n<0 then begin
writeln(’ne postoji’);
halt;
end;
if n<=1 then aa:=1
else aa:= ( (2*n)! div (n!*n!) ) – ( (2*n)! div (n+1)!(n-1)! );
end;
21. ZADATAK: Rade zeli da proba da svira klavir. Nakon sto je odabrao n crnih i k belih dirki,
on zeli da odsvira sve melodije od m tonova koje se mogu proizvesti uz pomoc ovih n+k dirki
pri cemu on zeli da crne i bele dirke koristi naizmenicno. Koliko je ovakvih kombinacija?
1. Ako tonovi ne mogu da se ponavljaju
2. Ako tonovi mogu da se ponavljaju
Dreamooni wi-fi (codeforces #476b)
Dreamoon stoji na 0 poziciji brojevne prave. Drazil šalje listu komandi na njegov smartphone
preko wi-fi-a i Dreamoon ih prati.
Ima dve vrste naredbi:
1. + znači da krene 1 korak u pozitivnom smeru
2. - znači da krene 1 korak u negativnom smeru
Ali Wi-Fi signal je veoma slab pa Dreamoon-ov telefon izbacuje neke greške ili ne može da
ucita neku komandu. Zato Dreamoon odlučuje da prati komande koje njegov telefon učita a
da za ostale baca novčic i ide nasumično.
Vama su date: Originalna lista koju je Drazil poslao Dreamoonu i Lista koj mu je stigla. Koja
je verovatnoća da ce Dreamoon stići na poziciju koju mu je Drazil poslao?
Primer:
unos
++-+-
+-+-+
Program p1;
var n,k,l,m:longint;
function fakt(a,l:longint):longint;
begin
if l=0 then fakt:=1
else fakt:=a*fakt(a-1,l-1);
end;
function st(a,l:longint):longint;
begin
if l=0 then st:=1
else st:=a*st(a,l-1);
end;
begin
read(n,k,m);
l:=m div 2;
if m mod 2=0 then writeln(fakt(n,l)*fakt(k,l)*2)
else writeln(fakt(n,l)*fakt(k,l+1)+fakt(k,l)*fakt(n,l+1));
if m mod 2=0 then writeln(st(n,l)*st(k,l)*2)
else writeln(st(n,l)*st(k,l+1)+st(n,l+1)*st(k,l));
end.
23. Svet je pozorište (codeforces #131c)
Postoji n dečaka i m devojaka koji bi dolazili u pozorišni klub. Da bi osmislili predstavu oni
treba da odaberu grupu koja sadrži tačno m glumaca koji sadrže ne manje od 4 dečaka i ne
manje od jedne devojke. Na koliko načina mogu da odaberu grupu? Naravno varijante koje se
razlikuju u sastavu grupe smatraju se drugačije. Pronaći broj načina.
Улазни
Linija ulaznih podataka sadrži tri cela broja n, m, t ( 4 ≤ n ≤ 30, 1 ≤ m ≤ 30, 5
≤ т ≤ n + t ).
Primer
улазни
5 2 5
излаз
10
улазни
4 3 5
излаз
3
Program p1;
var a:array[0..100,0..100] of int64;
n,m,i,j,t:longint;
ans:int64;
begin
readln(n,m,t);
for i:=0 to 60 do
begin
a[i,0]:=1;
for j:=1 to i do a[i,j]:=a[i-1,j]+a[i-1,j-1];
end;
for i:=4 to t-1 do ans:=ans+(a[n,i]*a[m,t-i]);
writeln(ans);
end.
24. Poenina liniji (codeforces #251a)
Mali Peja mnogo voli da skuplja poene. Nedavno mu je majka dala n tačaka na liniji OX .
Sada Peja treba da odredi koliko postoji načina da se odaberu tri tačke tako da razdaljina
izmedju dve najduže ne prelazi d.
Ulaz
Prva linija sadrži dva inegera: n i d (1 ≤ n ≤ 105; 1 ≤ d ≤ 109). Druga linija
sadrži n integera x1, x2, ..., xn, koji ne smeju da prelaze 109 — na x kordinantnoj osi.
Primer:
unos
4 3
1 2 3 4
ispis
4
unos
4 2
-3 -2 -1 0
ispis
2
unos
5 19
1 10 20 30 50
ispis
1
Program p1;
var a,b:array[1..100000] of longint;
n,i,d,l:longint;
p,s:int64;
begin
read(n,d);
for i:=1to n do
read(a[i]);
l:=1;
for i:=1to n do
begin
while((l<=n)and(a[l]-a[i]<=d))do
inc(l);
p:=l-i-1;
s:=s+((p*(p-1)) div 2)
end;
write(s)
end.