2016-05-11 9 views
0

Ich versuche, awk Skript zu schreiben, das 3 natürliche Zahlen, die Summe zu 60 generieren. Ich versuche mit Rand-Funktion, aber ich habe ein Problem mit der Summe 60Wie man 3 natürliche Zahl erzeugt, die Summe auf 60 mit awk

+1

2 Zufallszahlen erzeugen und 3. eine als berechnen (60 - number1 - Nummer2) –

+0

@Lashane rand() erzeugt Gleitkomma-, Es könnte also ein Problem sein. Tomasz, du kannst 3 zufällige Floats generieren, alle durch ihre Summe teilen und sie mit 60 multiplizieren, dann bekommst du 3 Zahlen, die auf 60 summieren. Dann um sie herum (nach oben/nach unten suchen) – hyst329

Antwort

0

Hier ist eine Möglichkeit:

awk -v n=60 'BEGIN{srand();a=int(rand()*n);b=int(rand()*(n-a));c=n-a-b; 
      print a,b,c}' 

Idee ist: ra 0=<a<60

  • erzeugen:

    • Zufallszahl a erzeugen NDOM Nummer b: 0=<b<60-a
    • c=60-a-b

    hier, habe ich eine Variable n=60, es einfach zu machen, wenn Sie andere Summe haben.

    Wenn wir dieses-liner 10-mal ausgeführt werden, erhalten wir Ausgang:

    kent$ awk 'BEGIN{srand();for(i=1;i<=10;i++){a=int(rand()*60);b=int(rand()*(60-a));c=60-a-b;print a,b,c}}' 
    46 7 7 
    56 1 3 
    26 15 19 
    14 12 34 
    44 6 10 
    1 36 23 
    32 1 27 
    41 0 19 
    55 1 4 
    54 1 5 
    
  • +0

    Danke, das ist was ich brauchen – Tomasz

    +0

    Aber das ist nicht so gut in Bezug auf probabilistische Verteilung. – hyst329