algoritmus - vypis vsetkych kombinaci

Programovacie jazyky, rady, poradňa...
gulko200
Light Expert
Light Expert
Príspevky: 49
Registrovaný: 21 jún 2007, 23:34

algoritmus - vypis vsetkych kombinaci

Príspevok od používateľa gulko200 »

modelovy priklad...mam vo vreci 10 ocislovanych guliciek, vyberam vzdy 4 gulicky ktore naspet nevhadzujem, potrebujem 2x algoritmus ktory mi vypise vsetky moznosti , jeden ked nebude zalezat na poradit (gulicka 1,2,3,4 je to iste ako keby vyberiem 4,3,2,1) a dalsi kde bude zalezat na poradi (gulicka 1,2,3,4 a 4,3,2,1 su 2 odlisne vybery)

dufam ze som to napisal zrozimitne

co sa tyka jazyka moze to byt v php,c,java,python,....
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Re: algoritmus - vypis vsetkych kombinaci

Príspevok od používateľa beluský »

kombinacie bez opakovania

Kód: Vybrať všetko

<?php
function comb($a, $len){
   if ($len > count($a))return 'error';
   $out = array();
   if ($len==1) {
      foreach ($a as $v) $out[] = array($v);
      return $out;
   }
   $len--;
   while (count($a) > $len) {
      $b = array_shift($a);
      $c = comb($a, $len);
      foreach ($c as $v){
         array_unshift($v, $b);
         $out[] = $v;
      }
   }
   return $out;
}
$test = array(1,2,3,4,5,6,7,8,9,10); // 10 lopticiek
$a = comb($test,4); // vyberame 4
print_r($a);
?>
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: algoritmus - vypis vsetkych kombinaci

Príspevok od používateľa mirak2 »

obe verzie vies vytvorit cez 4 for cykly
zalezi na poradi: mas styri for cykly (vnorene) a pri kazdom zacinas od prveho (medzitym kontrolujes ci aktualna hodnota premennej foru nie je uz vybrana)
nezalezi na poradi: znova styri vnorene cykly, prvy zacinas od jednotky, druhy vnoreny zacnes od premenna prveho+1, dalsi premenna druheho+1 atd a len to vypisujes (je to lahsie lebo nemusis kontrolovat)
dufam ze netrepem bludy
Napísať odpoveď