wie lasse ich hochzählen [closed]
Übersicht

![]() |
ViddeBetreff: wie lasse ich hochzählen [closed] |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo @ alle,
ich bin nach wie vor blutender anfänger und knapper seit tagen an der selben problematik - ohne erfolg. ich möchte per zufall die 4 werte A, B, C und D hochzählen lassen, aber so, dass diese zusammen genau den Wert X ergeben. kann mir jemand einen denkanstoß verpassen? wenn X = 100 sollte dann das ergebnis wie flogt aussehen: A = 15 B = 36 C = 28 D = 21 oder: A = 15 B = 36 C = 28 D = 21 im Extremfall auch: A = 0 B = 0 C = 100 D = 0 |
||
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins. |
- Zuletzt bearbeitet von Vidde am Di, Nov 04, 2008 16:01, insgesamt einmal bearbeitet
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du brauchst auf jedenfall die Zufallsfunktion Rand![]() ![]() ![]() In einer Variable speicherst du die gewünschte Summe (zB halt die 100) A is ne Zufallszahl zwischen 0 und 100 (also Rand(summe)) B is ne Zufallszahl zwischen 0 und 100 minus A --> Rand(summe-A) C = Rand(summe-A-B) D = summe - A - B - C Sollte so klappen. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Vidde |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen Dank für die rasche antwort. so klappt das schon.
das problem ist nun nur noch, dass der Wert A überwiegend große werte erhält, da bei ihm ja immer die möglichkeit auf 100 besteht. und die ergebnisse zu optimieren dachte ich da eher an eine schleife, welche die werte mehrmals hintereinander langsamer hochzäht bis X erreicht ist. |
||
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins. |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Zahl% = Input("Deine Zahl: ")
SeedRnd MilliSecs() A = Rnd(0,Zahl/Rnd(1,10)) B = Rnd(0,Zahl - A) C = Rnd(0,Zahl - A - B) D = Zahl - (A+B+C) Gesammt = A + B + C + D Print "A: " + A Print "B: " + B Print "C: " + C Print "D: " + D Print "A+B+C+D = " + Gesammt Edit: A = Rnd(0,Zahl/Rnd(1,10)) <-- Die Zahl wird einfach am Anfang durch einen Zufallswert von 1 bis 10 geteil so wird ein A mal kleiner mal größer... |
||
Windoof nein DANKE => ArchLinux ![]() |
- Zuletzt bearbeitet von Mathe am Mo, Nov 03, 2008 17:44, insgesamt 3-mal bearbeitet
![]() |
Vidde |
![]() Antworten mit Zitat ![]() |
---|---|---|
so hab ich´s schon umgesetzt. nach mehrmaligem durchlauf hat sich meine befürchtung bewahrheitet:
A = 50,7 % von X B = 21,5 % von X C = 15,6 % von X D = 12,2 % von X keine wirkliche chancengleichheit ![]() |
||
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins. |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
So haben theoretisch alle Werte dieselbe Chance kleiner zu werden:
Edit: Frag mich nicht, warum ich bei 100 anfange und dann runterzähle. Man kann natürlich auch bei 0 anfangen und dann hochzählen... gefällt mir sogar besser, und For-Next Schleife passt auch besser: Code: [AUSKLAPPEN] SeedRnd MilliSecs()
A = 0: B = 0: C = 0: D = 0 For i = 1 To 100 Select Rand(4) Case 1: A = A + 1 Case 2: B = B + 1 Case 3: C = C + 1 Case 4: D = D + 1 End Select Next Print A: Print B: Print C: Print D WaitKey End |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
- Zuletzt bearbeitet von SpionAtom am Mo, Nov 03, 2008 20:25, insgesamt 4-mal bearbeitet
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aber es fehlt noch was SeedRnd Millisecs() sonst sind beim mehrmaligen Programmstart immer alle Werte gleich... | ||
Windoof nein DANKE => ArchLinux ![]() |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Versuchs mal so
so vertauscht es einfach die Werte sodass ned immer A der grösste ist, ist nicht optimal aber ist besser ![]() Code: [AUSKLAPPEN] Zahl% = Input("Deine Zahl: ")
SeedRnd MilliSecs() a = Rnd(0,Zahl/Rnd(1,10)) b = Rnd(0,Zahl - A) c = Rnd(0,Zahl - A - B) d = Zahl - (a+b+c) Gesammt = a + b + c + d zuf=rnd(1,4) a_s=a b_s=b c_s=c if zuf = 1 a=b_s c=a_s b=c_s endif if zuf=2 a=c_s b=a_s c=b_s endif if zuf=3 a=b_s b=c_s c=a_s endif Print "A: " + a +" old A:"+a_s Print "B: " + b+" old B:"+b_s Print "C: " + c+" old C:"+c_s Print "D: " + d+" old D:"+d_s Print "a+b+c+d = " + Gesammt |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Vidde |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen dank an alle - ich bin schwert begeistert wie schnell man hier geholfen bekommt. das hat mir sehr weitergeholfen ![]() hab jetzt die ganze zeit runterzählen lassen (ab 30 statt 100) und bis grade waren alle tests brauchbar- bis auf den letzten. da war der erste wert plötzlich negativ (unfassbar). lasse jetzt hochzählen wie ursprünglich geplant und es funzzt super - nochmals besten dank an alle kopfzerbrecher. |
||
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group