Iskanje seštevka celih števil
Iskanje seštevka celih števil
Malo čuden naslov vprašanja, ampak vseeno: zanima me, kako bi v Excelu napisal formulo - bolj verjetno bo to makro ali funkcija - da bi mi izpisal vse možne številke, katerih seštevek da zahtevano število. Npr.: 4 dobimo, če seštejemo 2 in 2, 1 in 3 (zaporedje ni pomembno) ali 3 dobimo, če seštejemo 1 in 2 itd.
Pozdravljen zvonem
Pravzaprav mi ni jasno, čemu to potrebujeto, niti iz koliko števil naj bi bila sešteta vaša izbrana številka. Prilagam pa kodo.
Lp
Pravzaprav mi ni jasno, čemu to potrebujeto, niti iz koliko števil naj bi bila sešteta vaša izbrana številka. Prilagam pa kodo.
Koda: Izberi vse
Sub Makro1()
'
nase_stevilo = 4
For i = 0 To 9
For j = 0 To 9
If i + j = nase_stevilo Then MsgBox nase_stevilo & " = " & i & " + " & j
Next j
Next i
'
End Sub
Pozdravljeni,
problem boste morali opisati malce podrobneje, saj ni jasno ali vas zanimajo samo seštevki parov števil ali pa vse kombinacije (npr. 4 = 1+1+1+1). Slednjih je seveda pri večjih številih zelo zelo veliko. Zanimiva naloga, ki jo lahko rešte z uporabo preproste srednješolske matematike (koliko je vseh (različnih!) možnosti? ).
No če pa vas zanima samo seštevek dveh števil pa imate delno rešitev podano že v odgovoru pred mojim. Predlagana rešitev ima samo dve pomanjklivosti. Možno je dobiti rešitev za največ število 18 in rešitev bo dajala 2x iste rezultate (npr 1+3 in 3+1).
problem boste morali opisati malce podrobneje, saj ni jasno ali vas zanimajo samo seštevki parov števil ali pa vse kombinacije (npr. 4 = 1+1+1+1). Slednjih je seveda pri večjih številih zelo zelo veliko. Zanimiva naloga, ki jo lahko rešte z uporabo preproste srednješolske matematike (koliko je vseh (različnih!) možnosti? ).
No če pa vas zanima samo seštevek dveh števil pa imate delno rešitev podano že v odgovoru pred mojim. Predlagana rešitev ima samo dve pomanjklivosti. Možno je dobiti rešitev za največ število 18 in rešitev bo dajala 2x iste rezultate (npr 1+3 in 3+1).
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Stenliyev odgovor je deloma zadovoljiv. Pomankljivost je v mojih podatkih. Zanima me namreč samo ena kombinacija (permutacija - pozabil sem pravilni matematični izraz) in to tiste, pri katerih se dve enaki številki ne ponovita. Npr.: število 4 je možno zapisati kot: 0+4, 1+3, 2+2, 3+1, 4+0. Od napisanih kombinacij me zanima samo: 1+3 (ali 3+1). Torej: ne sme se pojaviti 0, ne smeta se pojaviti enaki številki (2+2), ne sme se pojaviti številka 0 in ne sme se pojaviti kombinacija z enakimi številkami samo v drugem vrstnem redu.
A je kaj bolj razumljivo
A je kaj bolj razumljivo
Še nekaj. Stenlyeva rešitev ima še eno pomankljivost. Poda samo rešitev seštevka dveh številk. Mene zanimajo kombinacije seštevka vseh rešitev pod pogji, ki sem jih podal v prejšnjem zapisu. Npr.: za številko 7 so zanimive rešitve: 6+1, 5+2, 4+3, 4+2+1. Za številko 9 so zanimive: 8+1, 7+2, 6+3, 5+4, 6+2+1, 5+3+1, 4+3+2.
Pozdravljeni,
Poem pa je rešitev povsem trivialna. Potrebno se je zapeljati do polovice števila in pač pisati račune:
PS: To so kombinacije
Poem pa je rešitev povsem trivialna. Potrebno se je zapeljati do polovice števila in pač pisati račune:
Koda: Izberi vse
Sub NajdiKombinacije(stevilo As Integer)
Dim stevec As Integer
For stevec = 1 To stevilo / 2 - 1
Debug.Print stevec & " + " & (stevilo - stevec) & " = " & stevilo
Next
End Sub
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
,
Vi sploh ne veste kako definirati problem, kako bi potem našli rešitev? Z nekaj predstave in truda sklepam, da potrebujete vse možne kombinacije seštevkov nekega števila, kjer se:
Proceduro zaženete tako, da v 'Immidiate' okno zapišete
in pritisnete ENTER.
Za število 12 dobite sledeče rešitve
Rešitev deluje rekurzivno, tako da najprej razbije 12 na 1 + 11 in potem 11 razbija dalje, brez uporabe 1. Tako dobi 1+2+9 in potem 9 razbija dalje brez uporabe 1 in 2... Ko porabi 1 poskusi z 2 in nato dalje...
Vi sploh ne veste kako definirati problem, kako bi potem našli rešitev? Z nekaj predstave in truda sklepam, da potrebujete vse možne kombinacije seštevkov nekega števila, kjer se:
- Dve števili znotraj seštevka ne ponovita
- Dva seštevka z istimi števili v drugačnem zaporedju ne ponovita
Koda: Izberi vse
Sub RazbijStevilo_tmp(Spredaj As String, ZacniPri As Integer, Stevilo As Integer)
Dim stevec As Integer
For stevec = ZacniPri To Stevilo / 2
Dim st1 As String, st2 As String
st1 = stevec & " "
st2 = (Stevilo - stevec) & " "
If ((InStr(1, Spredaj, st1) = 0) And (InStr(1, Spredaj, st2) = 0) And (stevec < (Stevilo - stevec))) Then
Debug.Print Spredaj & stevec & " + " & st2
RazbijStevilo_tmp Spredaj & stevec & " + ", stevec + 1, (Stevilo - stevec)
End If
Next
End Sub
Sub RazbijStevilo(Stevilo As Integer)
RazbijStevilo_tmp "", 1, Stevilo
End Sub
Koda: Izberi vse
Razbijstevilo <nako število>
Za število 12 dobite sledeče rešitve
Koda: Izberi vse
Razbijstevilo 12
1 + 11
1 + 2 + 9
1 + 2 + 3 + 6
1 + 2 + 4 + 5
1 + 3 + 8
1 + 4 + 7
1 + 5 + 6
2 + 10
2 + 3 + 7
2 + 4 + 6
3 + 9
3 + 4 + 5
4 + 8
5 + 7
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Matjaž! Makro deluje tako, kot sem si zamislil. Zanima me še, kako bi makro spremenil vv funkcijo tako, da bi mi rešitve podala v stolpcu. Npr. v "A1" vpišem število, v stolpcu b pa bi funkcija izpisala režitve. Sicer sem makro spremenilv v funkcijo (nova funkcija je v seznamu funkcij), kot rezultat pa mi izpiše #VREDN! Hvala za pomoč in razumevanje