Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Suma liczb bez powtórzeń
colachips
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 12.01.2009

Ostrzeżenie: (0%)
-----


Witam,

Chciałbym dodać do siebie kilka liczb we wszystkich możliwych kombinacjach, ale żeby działania się nie powtarzały.. Pokaże kod jaki zrobiłem

  1.  
  2. $liczby = $_POST['liczby'];
  3.  
  4. for ($i = 1; $i <= count($liczby); $i++) {
  5. for ($j = 1; $j <= count($liczby); $j++) {
  6. echo 'Liczba '.$liczby[$i].' + Liczba '.$liczby[$j].' = '.($liczby[$i]+$liczby[$j]).'<br />';
  7. }
  8. }
  9.  


Problem w tym, że powtarza działania, czyli np.

$liczby[1] = 111;
$liczby[2] = 222;
$liczby[3] = 333;

W wyniku tego petla wyświetli:

Liczba 111 + Liczba 111 = 222 //ok
Liczba 111 + Liczba 222 = 333 //ok
Liczba 111 + Liczba 333 = 444 //ok
Liczba 222 + Liczba 111 = 333 //blad, ta kombinacja juz byla

Będę wdzieczny za naprowadzenie na właściwy trop
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Zapis bitowy ( dwójkowy) liczby pokazuje nam jakie liczby mamy wziąć do działania.
W zapisie bitowym liczby wyglądają np tak
1) 0001
2) 0010
3) 0011
4) 0100
5) 0101
6) 0110
7) 0111
...
Mamy teraz twoje liczby 1,2,3,4. Podstawmy twoje liczby na odpowiednie pozycje. Z pozycji gdzie jest 1 pobieramy odpowiadającą jej (pozycji) liczbę i wstawiamy do działania. Jeżeli w całym ciągu, jest tylko jedna 1 to olewamy

Przykład:
Kod
      1 | 2 | 3 | 4  | wynik
     -----------------
1)  - 0 | 0 | 0 | 1  | ------
2)  - 0 | 0 | 1 | 0  | ------
3)  - 0 | 0 | 1 | 1  | 3 + 4 = 7
4)  - 0 | 1 | 0 | 0  | ------
5)  - 0 | 1 | 0 | 1  | 2 + 4 = 6
6)  - 0 | 1 | 1 | 0  | 2 + 3 = 5
7)  - 0 | 1 | 1 | 1  | 2 + 3 + 4 = 9
8)  - 1 | 0 | 0 | 0  | ------
9)  - 1 | 0 | 0 | 1  | 1 + 4 = 5
10) - 1 | 0 | 1 | 0  | 1 + 3 = 4
11) - 1 | 0 | 1 | 1  | 1 + 3 + 4 = 8
12) - 1 | 1 | 0 | 0  | 1 + 2 = 3
13) - 1 | 1 | 0 | 1  | 1 + 2 + 4 = 7
14) - 1 | 1 | 1 | 0  | 1 + 2 + 3 = 6
15) - 1 | 1 | 1 | 1  | 1 + 2 + 3 + 4 = 10 (dlatego na początku wstawiłem same 1 do ciągu i przeliczyłem na system dziesięty, przez co otrzymałem liczbę potrzebnych operacji. od tej wartości odejmiemy ilość liczb jakie mamy i otrzymujemy liczbę możliwych kombinacji (u nas 15 - 4 = 11) )


Ten post edytował wookieb 11.09.2009, 13:14:02
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 00:11