Autor:
Gendzo macherKategória:
MatematickéPublikovaný: 07.03.2010 / Počet zobrazení: 19839
Jozef Flavius - židovský kňaz, historik a učenec, žil v prvom storočí nášho letopočtu. Počas svojho života vytvoril niekoľko literárnych a autobiografických diel, v ktorých zachytáva udalosti jeho doby, napríklad i z obdobia prvej židovskej vojny. A práve k tomuto obdobiu života Jozefa Flavia - k vojne židov a Rimanov, sa viaže legenda, ktorá sa stala základom pre tento hlavolam.
Doplnené 21.5.2010 - riešenie pomocou MATLAB algoritmu.
Riešenie úlohy je na obrázku nižšie.
Jozef sa musí v kruhu postaviť na pozíciu 31, druhý vojak na pozíciu číslo 16.
Doplnené 21.5.2010 - všeobecné riešenie pomocou algoritmu:
Všeobecné riešenie tohto hlavolamu pomocou algoritmu mi zaslal Juraj Hledík z Bratislavy. Algoritmus je určený pre MATLAB, funguje to však aj v
Octave. Spúšťa sa príkazom
flavius(s,k,n), kde s,k,n sú parametre:
s - počet vojakov na konci
k - konštanta určujúca koľkého v poradí ostatní zabijú
n - celkový počet vojakov
V pôvodnej hádanke s=2, k=3, n=41. Tu je teda spomínaný zdrojový kód:
function [b]=flavius(s,k,n)
A=ones([n,1]);
i=k-1;
c=1;
m=0;
while norm(A,1)>s
while (m
if A(c)==1
m=m+1;
end
c=c+1;
if c==n+1
c=1;
end
end
if c==1
A(n)=0;
end;
if c>1
A(c-1)=0;
end
m=0;
end
b=[];
for j=1:n
if A(j)==1
b=[b;j];
end
end
endfunction
Algoritmus si možete stiahnuť aj ako súbor
flavius.m (klikni pravým tlačidlom myši a zvoľ možnosť "Uložiť ako..."). Jurajovi za príspevok do tohto hlavolamu prináleží sľúbená
odmena z internetového obchodu
Igelitka.sk (sám si vybral :-)).
Na vaše všeobecné riešenie pomocou matematického vzorca čakám aj naďalej...
DISKUSIA
Martin (neregistrovaný): Mala pripomienka
V zadaní sa píše že Flavius bol kňaz a nesúhlasil so samovraždou. Predpokladám, že z toho istého dôvodu nesúhlasil ani so zabíjaním vlastných bojovníkov. Je predsa iné zabiť v boji nepriateľa a iné niekoho (známeho, priateľa) popraviť, ako sa píše v zadaní. Teda z toho vyplýva, že Flavius by zrejme nebol zabil svojho spolubojovníka keby to ukázal los. Ak bol rovnaký aj ten vojak ktorý mal ostať nažive spolu s ním, ostáva zodpovedať otázku: Kto (by) zabil vojaka s číslom 39 (teda toho kto mal byť popravený ako 39-ty)? Aj keď z filozofického hľadiska by sa možno dalo povedať že vojak č.40 by mohol konal v sebaobrane, hlavne ak by bol č.39 veľmi agresívny...
09.04.2010, 07:51
Zdravim,
uz davnejsie som poslal vseobecny algoritmus v MATLABe na horeuvedeny mail, ale nedostal som odpoved. Chcel som vediet, ci je ok. Vdaka,
fisian
16.05.2010, 14:23
Gendzo macher:
pre fisian:
Ospravedlňujem sa, pozriem sa na to a odpíšem do emailu.
Gendzo
17.05.2010, 22:16
neviem kolko sa mordujem nad matematickym vzorcom a stale nic :( pokial sa to da tak som uplne vymlety :(
03.03.2012, 20:51
Siki (neregistrovaný): zbabelci
Do stredu kruhu
02.12.2013, 17:08
RadoDaj (neregistrovaný): Vzorec
S tým vzorcom to bude asi rovnako jednoduché ako nájsť vozrec pre n-té prvočíslo. Ale to len tak na prvý pocit...
06.01.2014, 09:42
SeaWolF (neregistrovaný): Moje riesenie
Z technickych dovodov pozmenime vyznam premennej s:
n - celkovy pocet vojakov
k - kolky v poradi ide na odstrel
s - poradie vojaka od konca
Nech n, k, s su prirodzene cisla pricom s <= n.
Funkcia flavius(n, k, s) vrati
napr. flavius(41, 3, 1) = 31, flavius(41, 3, 2) = 16, flavius(41, 3, 3) = 35, ...
Implementacia (C/Java):
int flavius(int n, int k, int s) {
return n < s ? 0 : (1 + (flavius(n - 1, k, s) + k - 1) % n);
}
Vztah:
latex.codecogs.com/gif.latex?%5Cbegin%7Balign*%7D%20n%2C%20k%2C%20s%20%26%5Cin%20%5Cmathbb%7BN%7D%2C%20s%20%5Cle%20n%5C%5C%20F_%7Bs-1%7D%5Ek%20%26%3D%200%5C%5C%20F_n%5Ek%20%26%3D%20%28F_%7Bn-1%7D%5Ek%20+%20k%20-%201%20%5Cmod%20n%29%20+%201%20%5Cend%7Balign*%7D
17.02.2014, 08:26
Pridaj nový príspevok do diskusie
Vieš o tom, že registrovaní návštevníci nemusia zadávať svoje meno?
Registrácia je jednoduchá a je zadarmo. A navyše, nikto sa viac nepodpíše pod tvojím nickom.