Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11787[/thread]

N Zahlen ermitteln mit Gesamtwert 100

Leser: 12


<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten
RPerl
 2008-05-10 23:36
#109529 #109529
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hallo Community,

ich hab (mal wieder) eine Frage! :-)
Wie kann ich N Zahlen ermitteln mit einem maximalen Gesamtwert von 100?
Die Zahlen sollen dabei immer zufaellig sein.
1. Beispiel:

N1. 30
N2. 10
N3. 60
======
100

2. Beispiel:
N1. 50
N2. 40
N3. 10
======
100

Kann sein das die Frage fuer euch trivial ist.
Wenn jemand kurz Zeit und Lust hat mir einen kleines snippet vorzuwerfen waer das sehr nett :-)

Schoenen Abend und liebe Gruesse
RPerl
KurtZ
 2008-05-10 23:55
#109530 #109530
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
dir ist schon klar dass das ein (nicht unbekanntes) mathematisches Problem ist, alle Kombinationen zu finden?

(Allerdings mit Nebenbedingungen, z.B. auf wieviele verschiedene Weisen kann ich Betrag X mit den Münzen in meiner Tasche bezahlen)

wenn du nur eine x-beliebige Lösung willst, dann ermittle N-1 Zufallszahlen, sortiere sie aufsteigend und interpretiere sie als Zwischensumme deiner gesuchten Sequenz.

Code: (dl )
1
2
3
4
5
N1. 0.1041...  =>  10
N2. 0.4076... => 30
N3. Rest => 60
=================
100

programmieren schaffst du schon alleine...

NACHTRAG: Nur maximaler Gesamtwert, statt genauer? Dann berechne N Zufallszahlen, der letzte entspricht dem Gesamtwert.
TMTOWTDYOG (there's more than one way to dig your own grave)
lichtkind
 2008-05-10 23:57
#109531 #109531
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ich glaub es würde helfen die aufgabe math genauer zu stellen. willst du alle möglichkeiten oder nur X kombinationen bis max wieviel summanden. ansonst ist ja einfach zu sagen:

Code (perl): (dl )
1
2
my $summe;
$summe += $_ for @zahlen;


in perl 6 hiesse das das

Code (perl): (dl )
my $summe = [+] @zahlen;

:)
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
RPerl
 2008-05-11 00:09
#109532 #109532
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hi,

danke ihr beiden schonmal. ;-)

Quote
ich glaub es würde helfen die aufgabe math genauer zu stellen. willst du alle möglichkeiten oder nur X kombinationen bis max wieviel summanden. ansonst ist ja einfach zu sagen:

Ich will irgendwelche Zahlen. Random. NICHT alle Kombinationen!
Jedoch >maximal< in der Gesamtzahl 100.
Man koennte sowas mit einer while machen, aber das ist recht CPU Aufwendig.
Erstelle solange 3 random Werte, solang diese 3 Werte ungleich Summe 100.
Aber das muesste es noch was sparsameres geben, vielleicht - oder?
RPerl
 2008-05-11 00:18
#109533 #109533
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Meine Loesung waer so:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;

my $sum;

while($sum != 100) {
  my $zahl1 = int rand(100);
  my $zahl2 = int rand(100);
  my $zahl3 = int rand(100);

  $sum = ($zahl1 + $zahl2 + $zahl3);

  if($sum == 100) {
    print "\t" . "=>" . "$zahl1 " . "$zahl2 " .  "$zahl3"
  }
}


aber ist das nicht ineffizient?
KurtZ
 2008-05-11 00:25
#109534 #109534
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
was stört dich an meiner effizienten Lösung?
TMTOWTDYOG (there's more than one way to dig your own grave)
RPerl
 2008-05-11 00:31
#109535 #109535
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Das ich deinem Vorschlag nicht ganz folgen konnte.

// Edit: Ah - jetzt glaub ich weiss ich was du vor hast. Stimmt. Danke!
(irgendwie geniale idee hehe)

// Edit 2: ich werde morgen den code posten. Nun geh ich erstmal schlafen. gn8 & thx jungs
Last edited: 2024-04-23 16:11:30 +0200 (CEST)
KurtZ
 2008-05-11 00:41
#109536 #109536
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
RPerl+2008-05-10 22:18:33--
aber ist das nicht ineffizient?


ineffizient ist geschmeichelt, sorry!
Ich schätze bei 3 Summanden brauchst du so im Durchschnitt schon 100 Durchläufe ... gruselig! : )
TMTOWTDYOG (there's more than one way to dig your own grave)
RPerl
 2008-05-11 00:44
#109537 #109537
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Eben :D
Wenn ich deine Loesung noch einmal zusammenfassen darf:

- N Werte ermitteln in ein array
- sortieren (aufsteigend)
- und danach?


// EDIT: bis dahin, so:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;

sub random {
  my $rand_count = shift;
  my @values;

  for (0 .. $rand_count-1) {
    push @values, rand(100);
  }

  for my $i (0 .. $rand_count-1) {
     print $values[$i], "\n"
  }
}

random(5);
KurtZ
 2008-05-11 00:50
#109539 #109539
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
KurtZ+2008-05-10 22:41:35--
Ich schätze bei 3 Summanden brauchst du so im Durchschnitt schon 100 Durchläufe ... gruselig! : )


verschätzt, bei Gleichverteilung hast du ne 17%ige Erfolgsquote, also ca 6 Durchläufe!
(trotzdem übel)

Code (perl): (dl )
1
2
3
4
5
6
7
8
for $i (0..100) { 
   for $j (0..100) { 
     for $k (0..100) { 
        $c++; 
        $s=$i+$j+$k; 
        $d++ if $s<=100
   }}}
print $d/$c;
TMTOWTDYOG (there's more than one way to dig your own grave)
<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten



View all threads created 2008-05-10 23:36.