WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Suche Formel (http://www.wcm.at/forum/showthread.php?t=230785)

Honk 24.09.2008 13:17

Suche Formel
 
Hallo Leute! Ich bin auf der Suche nach einer Formel bzw. nach einer fertigen Exceldatei, die mir folgendes berrechnen kann:
Ich habe eine bestimmte Anzahl an Zahlen (1 - 10) und möchte wissen, mit wievielen (und welchen) davon eine Zahl X (z.B. 365) gebildet werden kann.
Kennt ihr da eine Lösung?? :confused:
Danke
Honk

zAPPEL 24.09.2008 15:41

Mit der geringsten Anzahl der vorhandenen Zahlen nehme ich an? Denn sonst hat man ja extrem viele Lösungen.

Also wenn man 1,2,10 hat und 27 erzeugen möchte wäre die Lösung dann 10+10+2+2+2+1 ? Mit Schleifen,Ganzzahldivisionen und dem Modulooperator sicher nicht allzuschwer, wie man es mit Excel Lösen würde weiß ich leider nicht. (Ein PHP Script hätte ich schneller ;))

Honk 24.09.2008 16:02

Zitat:

Zitat von zAPPEL (Beitrag 2312510)
Mit der geringsten Anzahl der vorhandenen Zahlen nehme ich an? Denn sonst hat man ja extrem viele Lösungen.

Also wenn man 1,2,10 hat und 27 erzeugen möchte wäre die Lösung dann 10+10+2+2+2+1 ? Mit Schleifen,Ganzzahldivisionen und dem Modulooperator sicher nicht allzuschwer, wie man es mit Excel Lösen würde weiß ich leider nicht. (Ein PHP Script hätte ich schneller ;))

Hallo, danke für die schnelle Antwort. Leider ist mir ein Fehler in der Beschreibung meiner Frage unterlaufen: der Ziffernkreis geht von 1 - 50 und es darf keine Zahl doppelt vorkommen unm die Zahl X zu erreichen. :(
Hast du da auch einen Tip bei der Hand?
:)
thx
honk

zAPPEL 24.09.2008 16:55

Also als ganz einfaches PHP Script mit einer for-Schleife:

PHP-Code:

$aErgebnis = array();
$iEingabe $meineEingabe;
for (
$i=50;$i>=1;$i--) {
    if (
$iEingabe>=$i) {
        
$iEingabe-=$i;
        
$aErgebnis[] = $i;
    }
}
print_r($aErgebnis); 

Du zählt von 50 herunter. In jeder Schleife siehst du nach ob du die aktuelle Iteration von deiner Eingabe abziehen kannst. Wenn ja kommt die Zahl in das Ergebnisarray und du ziehst es von der Eingabe ab - wenn nicht gehts du einfach weiter bis du die aktuelle Iteration wieder von deiner Eingabe abziehen kannst.

Müsste funktionieren - gerade getestet.. eine zu hohe Zahl funktioniert dann natürlich nicht mehr.. also eine Zahl größer als 50+49+48+..+2+1.

lg

wbendl 24.09.2008 17:59

Hi!

Hier der Code für VBA:


Dim lngZahl As Long
Dim lngTempZahl As Long
Dim lngTeilZahl As Long

lngZahl = 365
lngTeilZahl = 50

lngTempZahl = lngZahl

Do While lngTempZahl > 0
If lngTempZahl >= lngTeilZahl Then
Debug.Print lngTeilZahl
lngTempZahl = lngTempZahl - lngTeilZahl 'Verwendete Zahl subtrahieren
lngTeilZahl = lngTeilZahl - 1 'Nächstkleinere Zahl versuchen
Else 'Nur (noch) eine Zahl notwendig
Debug.Print lngTempZahl
lngTempZahl = lngTempZahl - lngTempZahl 'Bis 0 subtrahieren
End If
Loop

Funktioniert genau wie Zappel erklärt hat.
Die Ausgabe mußt du für deine Zwecke anpassen.


mfg

WB


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag