Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Program który pokaże jakie liczby dodac aby otrzymać wynik


Rekomendowane odpowiedzi

Opublikowano

Tak jak w temacie, chodzi o to że mam liczby np:

20
40
10
70
30

Chce z tych liczb otrzymać wynik np. 90 i teraz program wypisze mi że potrzebuje liczb 70+20 aby otrzymać ten wynik. Nie mam pojęcia jak to zrobić, czy jest ktoś w stanie coś pomóc ?

stopka.webp

Opublikowano

Bardzo proste :)

#include <string.au3>

global  $liczby[5] = ['20','40','10','70','30']
For $x = 0 To UBound($liczby) - 1
   For $y = 0 To UBound($liczby) -1
	  If $liczby[$x] + $liczby[$y] = 90 Then
		 MsgBox(0,'','Liczby to ' & $liczby[$x] & ',' & $liczby[$y])
		 EndIf
	  Next
   Next
Opublikowano

Ale chodzi mi o to że mam tych liczb np 50 i teraz chce z nich wynik 1000 a ten program dodaje tylko dwie liczby, i właśnie nie mam pomysłu jak to zrobić

 

edit

Zrobiłem to w ten sposób na że dodaje 3 razy ale to bym musiałbym cały czas dopisywać zmienne, i jeszcze jest jeden problem bo jak mam np 10+20+30 i teraz dam że chce wynik 20 to on mi doda 10+10 czyli dwa razy użyje zmienną

For $x = 0 To UBound($liczby) - 1
	   For $y = 0 To UBound($liczby) -1
		  If $liczby[$x] + $liczby[$y] = $suma Then
			 MsgBox(0,'','Liczby to ' & $liczby[$x] & ',' & $liczby[$y])
		  Else
			  For $z = 0 To UBound($liczby) -1
				If $liczby[$x] + $liczby[$y] + $liczby[$z] = $suma Then
					MsgBox(0,'','Liczby to ' & $liczby[$x] & ',' & $liczby[$y] & ',' & $liczby[$z])
				EndIf
			  Next
		   EndIf
	   Next
	Next

stopka.webp

Opublikowano

Sprawdzaj rekurencyjne wszystkie możliwości (przy każdym wywołaniu przechowuj jakie były poprzednie liczby), wychodź z rekurencji jeśli suma >=  1000. Jeśli suma będzie równa to dodatkowo dodaj te kolejne liczby do listy poprawnych odpowiedzi.

 

Pozostaje problem wykluczenia identycznych odpowiedzi. Można to zrobić poprzez zrobienie tego tak, że z każdym rozgałęzieniem dodajesz tylko te liczby, które są później niż poprzednia (ewentualnie też ta co poprzednia jeśli chcesz mieć możliwe dodawanie tych samych kilka razy)

Opublikowano
Opublikowano

czyli musiał bym zrobić tyle pętli ile jest miejsc w tablicy a to były bo bez sensu bo za każdym razem będę potrzebował inną ilość 

stopka.webp

Opublikowano


#include <Array.au3>

 

Global $liczba[10]

$liczby = ""

$liczba[0] = 50

$liczba[1] = 20

$liczba[2] = 20

$liczba[3] = 40

$liczba[4] = 10

$liczba[5] = 60

$liczba[6] = 70

$liczba[7] = 100

$liczba[8] = 90

$liczba[9] = 80

_ArraySort($liczba)

$doznalezienia = 450

$doznalezienia_ = $doznalezienia

 

For $i = UBound($liczba)-1 To 0 Step -1

If $liczba[$i] <= $doznalezienia Then

$liczby &= $liczba[$i]&","

$doznalezienia -= $liczba[$i]

EndIf

If $doznalezienia = 0 Then ExitLoop

Next

 

If $doznalezienia <> 0 Then

MsgBox(0,"","Z tych liczb nie można uzyskać wyniku: "&$doznalezienia_)

Else

MsgBox(0,"",$liczby)

EndIf

Opublikowano

@Ballas

 

No chyba jednak nie...

Testowałeś to w ogóle?

 

Sprawdź co ten programik zwróci dla tablicy:

{ 30, 20, 20, 20, 80 }

, z suma 90.

 

No pokazuje, że się nie da uzyskać a ja widzę, że się da: 20+20+20+30=90.

Opublikowano

A gdzie w pierwszym poście mistrzu widzisz powtarzające się liczby  o.O

 

Lol... ale to nie w tym jest problem. Ty chyba nie wiesz jak działa to coś co napisałeś. No i tak BTW. to w pierwszym poście nigdzie nie ma załozenia, że nie mogą sie powtarzac, więc mogą.

 

Masz kolejny przykład:

Tablica:

{ 40, 50, 80 }

i suma 90.

 

Ojojojoj... nic sie nie powtarza a ten inteligentny program znowu pokazuje ze sie nie da. No chyba ze wedlug ciebie 40+50 nie jest rowne 90...

Opublikowano

mogą się powtarzać te liczby z których mają powstawac liczby, ale nie tak że mam np 50,20,20,10 i chce wynik 60 a on mi zrobi 3 razy 20 czyli 20+20+20 bo tej jednej 20 nie ma

 

 

Program od Ballas wydaje się dobrze działać, mam jeszcze pytanie dlaczego jak zrobie 

	$liczba = StringSplit(GUICtrlRead($Edit1),"+")

czyli z edita odczytam liczby np. 10+20+30+40+50+60+70+80+90+100 i rozdzielam je + do tablicy wtedy program nie chce działać

stopka.webp

Opublikowano
Program od Ballas wydaje się dobrze działać

 

Z jego przykładem tak...

 

mogą się powtarzać te liczby z których mają powstawac liczby, ale nie tak że mam np 50,20,20,10 i chce wynik 60 a on mi zrobi 3 razy 20 czyli 20+20+20 bo tej jednej 20 nie ma

 

Jak zrobisz tak jak ci mówimy to będziesz miał wszystkie możliwe.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...