php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.01.2006, 12:27  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard Summe solang verkleinern, bis unter bestimmter Zahl?

Hallo!

Es geht um ein Browsergame, bei dem mich ein Freund gegeben hat etwas fertig zustellen. Aber jetzt habe ich ein Problem.

Ich habe 5 Variablen $a $b $c $d $e. Das sind die 5 Rohstoffe. Alles ganze Zahlen. Dann habe ich eine Zahl von Transportern, die eine Gesamtladungszahl haben. Also kommt zum Beispiel eine Ladekapazität von 5000 raus. Jetzt muss ich es irgendwie schaffen, dass die Summe aus $a $b $c $d $e nicht mehr als diese 5000 beträgt. Sollte das mehr als 5000 sein, muss er irgendwie $a-$e so runterregulieren, dass es auf die 5000 kommt.

Gibts da ne Möglichkeit?
BartTheDevil89 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.01.2006, 12:37  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Lass es in einer Schleife laufen, solange $summe >$max ist vermindere einen der Werte a,b,c... um 1....

Oder addiere erst a,b,c,d und rechne dir e dann ganz einfach aus

Was soll'n das werden wenns fertig ist, klingt irgendwie extrem sinnlos!?
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 28.01.2006, 12:40  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Werbegeschenk
Was soll'n das werden wenns fertig ist, klingt irgendwie extrem sinnlos!?
Bestimmt eine Hausaufgabe, die wir hier lösen sollen.

Gruß
phpfan
 
Alt 28.01.2006, 14:23  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard

Zitat:
Zitat von phpfan
Zitat:
Zitat von Werbegeschenk
Was soll'n das werden wenns fertig ist, klingt irgendwie extrem sinnlos!?
Bestimmt eine Hausaufgabe, die wir hier lösen sollen.

Gruß
phpfan
Nene, keine Hausaufgaben. Geht um ein Projekt von mir, wo mir dabei irgendwie kein weg einfällt, wie ich das lösen kann.

Die Zahlen $a $b $c $d $e werden alle per Zufall erstellt. Also jede zahl wird zwischen 0 und einem Limit erstellt, was bei jeder Zahl anders ist. Könnte man dabei schon irgendwie mit einbringen, dass die Summe aus allen nicht höher als $max sein darf?
BartTheDevil89 ist offline  
Alt 28.01.2006, 14:34  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

natürlich lässt sich das umsetzen, allerdings ist das ergebnis nicht eindeutig. du musst schon ein polynom angeben, das es zu lösen gilt, sonst ist das problem witzlos. du musst ja nur vom ersten wert die differenz zwischen sum und max abziehen, um sum = max zu erreichen.

Code:
var a, b, c, d, e;
var max;
sum = a+b+c+d+e;
if (sum > max) {
   a = a - (sum - max); 
}
assert(sum == max);
völlig schwachsinnige aufgabenstellung also.
... und wenn a nicht kleiner als 0 sein darf, musst halt sukzessive a, b, c und d null setzen, bis sum = max.

und weil ich glaube, dass die frage eigentlich aus einem problem entstanden ist, das u.U. interessant zu lösen wäre, verweise ich dich hiermit auf
http://www.lugbz.org/documents/smart...s_de.html#goal
und bitte um die komplette problemstellung.
axo ist offline  
Alt 04.02.2006, 14:21  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Aus einem zweiten Thread:
Zitat:
Zitat von BartTheDevil89
Hallo!

Es geht um ein Browsergame, bei dem mich ein Freund gegeben hat etwas fertig zustellen. Aber jetzt habe ich ein Problem.

Ich habe 5 Variablen $a $b $c $d $e. Das sind die 5 Rohstoffe. Alles ganze Zahlen. Dann habe ich eine Zahl von Transportern, die eine Gesamtladungszahl haben. Also kommt zum Beispiel eine Ladekapazität von 5000 raus. Jetzt muss ich es irgendwie schaffen, dass die Summe aus $a $b $c $d $e nicht mehr als diese 5000 beträgt. Sollte das mehr als 5000 sein, muss er irgendwie $a-$e so runterregulieren, dass es auf die 5000 kommt.

Gibts da ne Möglichkeit?
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 04.02.2006, 14:22  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

natürlich. Hängt aber davon ab, wie das geschehen soll:
1.Einfach soviel von $a reinfüllen, bis kein Platz ist, oder $a leer ist, wenn $a leer wurde dann mit $b weitermachen
2.Von allen Rohstoffen gleichmäßig auffüllen
3. Zufällige Verteilung
4. Davon am meisten nehmen, wovon am meißten da ist

Ich mache mal ein Beispiel für 2, weil ich glaube, dass das das ist, was du willst.


PHP-Code:
<?php
$a 
5000;
$b 3000;
$c 6000;
$d 1000;
$e 10000;

$lager 10000;

$sum $a+$b+$c+$d+$e;
if(
$lager >=$sum) {
        
$aKlau $a;
        
$bKlau $b;
        
$cKlau $c;
        
$dKlau $d;
        
$eKlau $e;
        
$a 0;
        
$b 0;
        
$c 0;
        
$d 0;
        
$e 0;
} else {
        
$aKlau 0;
        
$bKlau 0;
        
$cKlau 0;
        
$dKlau 0;
        
$eKlau 0;
        while(
$aKlau+$bKlau+$cKlau+$dKlau+$eKlau $lager) {
                
$per = ($lager-($aKlau+$bKlau+$cKlau+$dKlau+$eKlau))/5;
                if(
$per <= $a) {
                        
$a -= $per;
                        
$aKlau += $per;
                } else {
                        
$aKlau += $a;
                        
$a 0;
                }
                if(
$per <= $b) {
                        
$b -= $per;
                        
$bKlau += $per;
                } else {
                        
$bKlau += $b;
                        
$b 0;
                }
                if(
$per <= $c) {
                        
$c -= $per;
                        
$cKlau += $per;
                } else {
                        
$cKlau += $c;
                        
$c 0;
                }
                if(
$per <= $d) {
                        
$d -= $per;
                        
$dKlau += $per;
                } else {
                        
$dKlau += $d;
                        
$d 0;
                }
                if(
$per <= $e) {
                        
$e -= $per;
                        
$eKlau += $per;
                } else {
                        
$eKlau += $e;
                        
$e 0;
                }
        }
}
echo 
"A: ".$a."

B: "
.$b."

C: "
.$c."

D: "
.$d."

E: "
.$e."

AKlau: "
.$aKlau."

BKlau: "
.$bKlau."

CKlau: "
.$cKlau."

DKlau: "
.$dKlau."

EKlau: "
.$eKlau."
"
;
?>
1. Das geht 100% auch besser und einfacher
2. Nein, ich habe gerade absolut nichts zu tun

[EDIT]
Mir fällt gerade auf, dass diese methode sogar total bescheuert ist, aber was solls
Buhmann ist offline  
Alt 05.02.2006, 11:59  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard

Zitat:
Zitat von Buhmann
[EDIT]
Mir fällt gerade auf, dass diese methode sogar total bescheuert ist, aber was solls
Ja, Variante 2 ist schon richtig. Aber wenn es total bescheuert ist, gibts dann noch ne bessere Möglichkeit?
BartTheDevil89 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CRC Summe einer Datei ermitteln?? PHP Tipps 2004 1 14.10.2004 09:23


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:37 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.