범위 내에서 여러 난수 생성


답변:


7

당신이 의미하는 경우 rand에서 패키지 (OpenSSL을에서 일 반대), 그것은 단지 상한, 하한 지원하지 않습니다. 당신이 할 수있는 일은 더 낮은 바운드-제로-다음 더 낮은 바운드 트릭입니다.rand

$ rand -N 10 -M 100 -e -d '\n' | awk '{$0 += 100}1'
170
180
192
168
169
170
117
180
167
142
  • -N 필요한 난수입니다.
  • -M숫자 rand출력 의 상한이 되므로 ( 최대 - 최소 = 100)
  • -e -d '\n'구분자를 줄 바꿈으로 설정합니다. 의 처리 편의성을위한 것 awk입니다.

awk코드는 각 줄을 소요하고 여기에 100을 추가합니다.


좋아, Muru. 그게 다야! 많은 Tks.
ignacio caviedes

미끼, 판타스틱, 무루. Muchas Gracias.
ignacio caviedes

6

사용 python:

#!/usr/bin/env python2
import random
for i in range(10):
    print random.randint(100, 200)

출력 :

187
123
194
190
124
121
191
103
126
192

여기 에서는 100과 200 사이의 10 ( )의 임의 정수를 포함 하는 random모듈을 사용했습니다 (포함) ( ).pythonrange(10)random.randint(100, 200)


5

펄 방식은 다음과 같습니다.

$ perl -le 'print 100+int(rand(101)) for(1..10)'

129
197
127
167
116
134
143
134
122
117
Or, on the same line:

$ perl -e 'print 100+int(rand(101))." " for(1..10); print "\n"'
147 181 146 115 126 116 154 112 100 116 

당신은 또한 사용할 수 있습니다 /dev/urandom( 여기 에서 적응 ) :

$ for((i=0;i<=10;i++)); do 
    echo $(( 100+(`od -An -N2 -i /dev/urandom` )%(101))); 
done
101
156
102
190
152
130
178
165
186
173
143

@ignaciocaviedes 천만에요. 그러나 이러한 답변 중 하나 (어쩌면 원하는 도구를 사용하는 muru)를 수락 하고 의견을 남기지 않고 나머지를 찬성 하는 것을 고려하십시오 . 이것이 바로 감사의 표현입니다. Y porque le escribiste en Castellano al Muru? El tío es de India! : P
terdon

@ terdon 나는 당신이 방금 말한 것을 모른다. Oo
muru

4

당신은 또한 사용할 수 있습니다 awk:

$ awk -v min=100 -v max=200 -v freq=10 'BEGIN{srand(); for(i=0;i<freq;i++)print int(min+rand()*(max-min+1))}'
132
131
148
100
104
125
103
197
184
165

3

shufGNU의로 coreutils에서 :

$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139

제 질문에 가장 적합한 답변은 Cuonglm입니다. 감사합니다; 대단히 감사합니다.
ignacio caviedes

2

사용할 수 있습니다 $RANDOM.

number=0   #initialize the number
FLOOR=100
RANGE=200
while [ "$number" -le $FLOOR ]
do
  number=$RANDOM
  let "number %= $RANGE"  # Scales $number down within $RANGE.
done
echo "Random number between $FLOOR and $RANGE $number"
echo

괜찮아, 파비 다시 많이 Tks.
ignacio caviedes

1

배쉬 버전

i카운터를 사용하여 for 루프를 간단하게 에뮬레이션하는 것은 없습니다 while. 범위는 if . . . else . . .fi구조를 사용하여 설정됩니다 . 참고 사항 : 내 프롬프트는 먼저 디렉토리를 작업 한 다음 입력 영역이므로 작업 내용을 혼동하지 마십시오.

$ ./bashRadom.sh 100 200                                                       
190
111
101
158
171
197
199
147
142
125

bashRadom.sh:

#! /bin/bash

i=0; 
while [ $i -lt 10  ]; do 

  NUM=$RANDOM; 
  if [ $NUM -gt $1 ] && [ $NUM -lt $2  ]; then 
      echo $NUM; 
  else continue; 
  fi;
  i=$((i+1));

done

C 버전

이것은 제가 대학에서 C 수업을받는 동안 사용한 코드입니다. 이 질문에 맞게 추가 한 작은 편집은 소스에 값을 하드 코딩하는 대신 명령 행 인수를 사용하는 것입니다.

$ gcc randfunc.c   
$ ./a.out 100 200
100 
106 
155 
132 
161 
130 
110 
195 
105 
162 
187 

randfunc.c:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int randInt (int, int);

void
main (int argc, char *argv[])
{    
  int min = atoi (argv[1]), max = atoi (argv[2]), i = 0;
  srand (time (NULL));    

  for (i; i < 11; i++)
    {
      printf ("%d \n", randInt (min, max));
    }    
}    

int
randInt (int a, int b)
{
  int randValue;
  randValue = a + (int) rand () % (b - a + 1);
  return randValue;    
}


@muru 누군가가 이미 게시 한 것을 보지 못했습니다. C 버전을 추가하는 중입니다. C 외에도 bash 버전을 유지하면 괜찮습니까?
Sergiy Kolodyazhnyy

어느 쪽이든 괜찮습니다.
muru December

당신은 C를 사용하는 거라면, 당신은 정말로으로 C ++를 사용한다 random라이브러리 : stackoverflow.com/a/19728404/2072269 , stackoverflow.com/a/19666713/2072269
muru

@muru 나는 ​​C ++에 익숙하지 않고 지금까지 기본 C에만 익숙합니다. 그러나 정보 감사합니다 ^ _ ^
Sergiy Kolodyazhnyy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.