Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Ma³y problem matematyczny
Forum PHP.pl > Forum > Gotowe rozwi±zania > Szukam
Saint
Nigdy nie mia³em g³owy do przedmiotów ¶cis³ych dlatego szukam jakiego¶ rozwi±zania / ma³ego skryptu, który wygenerowa³ by mi wszystkie mo¿liwo¶ci takiego dzia³ania:

x * y * z * q = abc (abc jest znane)

np. gdy wynik jest dajmy na to 40 to mamy np. 2 * 4 * 1 * 5 = 40

Ogólnie mówi±c potrzebne mi s± cyfry, które przemno¿one przez siebie dadz± mi wynik, który znam.

Z góry dziêkujê za pomoc.
nevt
W³a¶ciwy dzia³ to Gotowe rozwi±zania / Szukam. Przenoszê temat.
nexis
  1. <?php
  2. echo '<code>';
  3.  
  4. $abc = 40;
  5.  
  6. for ($x = 1; $x <= $abc; $x++) {
  7.   for ($y = 1; $y <= $abc; $y++) {
  8.      for ($z = 1; $z <= $abc; $z++) {
  9.         for ($q = 1; $q <= $abc; $q++) {
  10.            if ($x*$y*$z*$q == $abc) {
  11.               printf("%d * %d * %d * %d = %d<br />" . PHP_EOL, $x, $y, $z, $q, $abc);
  12.            }
  13.         }
  14.      }
  15.   }
  16. }
  17.  
  18. echo '</code>';
  19. ?>
Saint
nexis: dziêkujê za podpowied¼, ale: albo pope³ni³êm jaki¶ b³±d albo b³±d jest w kodzie wiêc mo¿e wyja¶nie konkretniej o co chodzi.

Je¶li szukam czterech liczb jednocyfrowych, których przemno¿enie przez siebie da mi np 40 to mamy najmniej kilka mo¿liwo¶ci:
2415
2152
2541
4215 itd.
Chodzi mi o to aby po wpisaniu abc skrypt "wyplu³" mi wszystkie takie mo¿liwo¶ci.
JoShiMa
A czym te 4 mo¿liwo¶ci siê ró¿ni±. Sk³adniki sa te same. To tylko permutacja
Saint
Cytat(JoShiMa @ 7.11.2008, 17:32:07 ) *
A czym te 4 możliwości się różnią. Składniki sa te same. To tylko permutacja.

OK. Robimy to tak np. abc = 216 dzielniki jednocyfrowe 216 to: 1, 2, 3, 4, 6, 8, 9 i cały sztuka polega na tym aby odszukać czterocyfrowe wszystkie kombinacje przy minimalnym wysiłku smile.gif.

Dla przykładu 2304:
4889
4898
4988
8849
8489
8498
9488
9848
8894
8948
8984
9884
6886
6868
6688
8686
8668
8866
nexis
Wiêc je¶li maj± to byæ tylko liczby jednocyfrowe, to mo¿esz u¿yæ takiego kodu:
  1. <?php
  2. echo '<code>';
  3.  
  4. $abc = 2304;
  5.  
  6. for ($x = 1; $x <= 9; $x++) {
  7.   for ($y = 1; $y <= 9; $y++) {
  8.      for ($z = 1; $z <= 9; $z++) {
  9.         for ($q = 1; $q <= 9; $q++) {
  10.            if ($x*$y*$z*$q == $abc) {
  11.               printf("%d%d%d%d<br />" . PHP_EOL, $x, $y, $z, $q);
  12.            }
  13.         }
  14.      }
  15.   }
  16. }
  17.  
  18. echo '</code>';
  19. ?>

co do nastêpuj±cy wynik:
Kod
4889
4898
4988
6688
6868
6886
8489
8498
8668
8686
8849
8866
8894
8948
8984
9488
9848
9884
Saint
nexis: Przepraszam, że zawracam Ci głowę, ale czy mógłbyś pokazać na abc = 216 i napisać szerszy komentarz bo widzę jak to jest zrobione, ale nie do końca rozumiem sad.gif


EDIT:
OK już się połapałem smile.gif Dziekuję.
To jest wersja lo-fi g³ównej zawarto¶ci. Aby zobaczyæ pe³n± wersjê z wiêksz± zawarto¶ci±, obrazkami i formatowaniem proszê kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.