Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Čaute,
potrebujem vytvoriť program, ktorý nájde všetky permutácie s niektorými opakovanými prvkami.
pre lepšie pochopenie hodím príklad:
ak by bol vstup programu boli prvky: 0, 0, 1, 1, 1
výstup by mal byť:
00111 01011 01101 01110 10011 10101 10110 11001 11010 11100
Jediné, čo zatiaľ viem je, že počet týcho permutácii je možné vypočítať podľa vzorca: 
Teda pre uvedený príklad by to bolo: 
Neviete ako by sa to dalo spraviť?
Díki.
Offline

Chceme k jedniček a n-k nul. Na začátku umístíme jedničky na pozice 1,2,...,k. V každém kroku posuneme poslední jedničku doprava. Když dojede na konec, posuneme doprava předposlední a tu poslední dáme těsně za posunutou předposlední. Když dojedou na konec dvě, posuneme předpředposlední a dvě poslední zarovnáme těsně za ni, atd.
Stačí takto? Mám k tomu někde i C++ kód, co jsem psal za domácí úkol.
Offline
↑ Kondr:
Díki, za odpoveď.
Už tomu oveľa lepšie rozumiem. Mohol by si sem predsa len hodiť ten algoritmus, ak ho máš niekde po ruke?
(Môj program mi vyhadzuje nie vždy správne hodnoty.)
Ďakujem.
Offline

while(!done){
for(int i=0;i<57;i++)key[i]=0;
for(int i=0;i<6;i++)key[ones[i]]=1;
//zde se neco dela s polem key, ve tvem pripade vypis
ones[5]++;
int c;
for(c=5;ones[c]==57+c-5;c--){
if(c==0){
done=true;
}
else ones[c-1]++;
}
for(int i=c+1;i<6;i++)ones[i]=ones[c]+i-c;
}Je to součást programu na prolamování šifrované komunikace mezi počítačem a kreditkou. Šifrovací věci jsem z toho vyházel, snad jsem tím nenarušil funkcionalitu. V programu bylo napevno zvoleno, že rozdělujeme 6 jedniček na 57 pozic.
Offline
Stránky: 1