2016-05-11 5 views
0

Я пытаюсь написать awk-скрипт, который генерирует 3 натуральных числа, которые суммируются до 60. Я пытаюсь использовать функцию rand, но у меня проблема с суммой до 60Как сгенерировать 3 натуральных числа, которые составляют 60, используя awk

+1

генерации случайных чисел 2 и вычислить 3-й один, как (60 - номер1 - number2) –

+0

@Lashane RAND() генерирует с плавающей точкой, так что это может быть проблемой. Tomasz, вы можете сгенерировать 3 случайных поплавков, делить все на их сумму и умножить на 60, вы получите 3 числа, которые суммируются до 60. Затем округлите их (проверьте вверх/вниз, чтобы компенсировать) – hyst329

ответ

0

Вот один из способов:

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

Идея:

  • генерируют случайное число a: 0=<a<60
  • генерируют ра ndom номер b: 0=<b<60-a
  • c=60-a-b

здесь, я установил переменную n=60, чтобы сделать это легко, если у вас есть другая сумма.

Если запустить этот один вкладыш 10 раз, мы получаем выход:

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

Спасибо, это то, что я – Tomasz

+0

Но это не так хорошо с точки зрения вероятностного распределения. – hyst329