Autor Zpráva
nemeja
Profil
Pěkný večer,
mám takový problém. Dostal jsem zadáno 6 čísel, které by mi určitou kombinací měli dát konečný výsledek 49. Nevím jak to spočítat na papíře, tak mě napadlo, že to zkusím pomocí PHP a to tak, že všechny hodnoty v poli sečtu a zároven odečtu, uložím do dalšího pole a takhle budu postupovat dokud to nenajde výsledek 49. Je tento postup správný? Pro náhled sem přidám ještě kod:
  // upravení nastavení PHP
  ini_set("memory_limit","-1");
  ini_set("max_execution_time","0");
  // zadaná čísla
  $pole = array( 1 => 110, 2 => 52, 3 => 91, 4 => 87, 5 => 63, 6 => 44);
  while( true ){
    foreach( $pole as $nazev => $hodnota ){
      unset( $pole[$nazev]);
      foreach( $pole as $nazev_1 => $hodnota_1 ){
        if( ( $hodnota + $hodnota_1 ) == 49 ){
          echo "$nazev + $nazev_1 == 49";
          break;
        } else {
          $pomocne[ $nazev . " + " . $nazev_1] = $hodnota + $hodnota_1;
        }
        
        if( ( $hodnota - $hodnota_1 ) == 49 ){
          echo "$nazev - $nazev_1 == 49";
          break;  
        } else {
          $pomocne[ $nazev . " - " . $nazev_1] = $hodnota + $hodnota_1;  
        }
      }
    }
    $pole = $pomocne;  
  }
juriad
Profil
rekapitulace:
máš zadáno 6 čísel (označme N1 -- N6)
a jedno další (označme S)

musíš sečíst všechna N, přičemž některé s kladným znaménkem, jiné se záporným, tak aby vyšlo S

chápu to správně?
nemeja
Profil
juriad:
prakticky jo :D ale to je jen moje domněnka, že se to bude pouze sčítat a odčítat :D co jsem tak koukal, tak na to asi bude zapotřebí kombinatorika, ale to jsem trošku z netu nepobral. :)
juriad
Profil
pokud se má každé číslo použít právě jednou, tak je to ekvivalentní úloze dvou loupežníků:
na vstupu bude množina předmětů (s přidaným S): {N1, N2, N3, N4, N5, N6, S} a ty je chceš rozdělit na dvě množniny se shodným součtem:
například N1+N2+N3+N4 = N5+N6+S
pak by řešením bylo: N1+N2+N3+N4-N5-N6 = S

najdi si něco o problému dvou loupežníků

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: