การสร้างตัวเลขสุ่มหลายรายการภายในช่วง


8

ฉันต้องการที่จะสร้างพูดว่า 10 ตัวเลขสุ่มระหว่าง 100 และ 200 (รวมทั้งสอง) ฉันจะทำมันด้วยแรนด์ได้อย่างไร


2
คุณหมายถึงrandอะไร RANDOMตัวแปร? /dev/random? /dev/urandom?
muru

ไม่ฉันแค่หมายถึงคำสั่ง rand ที่คุณเรียกใช้จากการทุบตี
อิกนาชิโอ caviedes

1
นี้randหรือนี่rand?
muru

คำตอบ:


7

ถ้าคุณหมายถึงrandจากแพคเกจ (เมื่อเทียบกับหนึ่งจาก OpenSSL) มันไม่สนับสนุนผูกพันต่ำเพียงขอบเขตบน สิ่งที่คุณสามารถทำได้คือเคล็ดลับ shift-bound-bound-to-zero-then-add-lower-boundrand

$ 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ผลลัพธ์ดังนั้น ( max - min = 100)
  • -e -d '\n'ตั้งค่าตัวคั่นเป็นบรรทัดใหม่ awkว่าเพื่อความสะดวกสบายของการประมวลผลโดย

awkรหัสแล้วจะใช้เวลาแต่ละบรรทัดและเพิ่ม 100 ถึงมัน


เยี่ยมมาก Muru แค่นั้นแหละ! พยายามมาก
อิกนาชิโอ caviedes

คลิกที่นี่เพื่อดูภาพวาด Muru ขอบคุณมาก ๆ.
อิกนาชิโอ 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

ที่นี่ฉันได้ใช้randomโมดูลของpythonการสร้างrange(10)จำนวนเต็ม10 ( ) สุ่มระหว่าง 100 และ 200 (รวม) ( random.randint(100, 200))


5

นี่เป็นวิธี Perl:

$ 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 ยินดีต้อนรับ อย่างไรก็ตามโปรดพิจารณายอมรับหนึ่งในคำตอบเหล่านี้ (คำแนะนำของอาจารย์ perhap ซึ่งใช้เครื่องมือที่คุณต้องการ) และถอนส่วนที่เหลือแทนการแสดงความขอบคุณ นั่นคือวิธีขอบคุณที่แสดงออกมาที่นี่ คุณ por le 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

ด้วยshufจาก GNU coreutils:

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

ฉันคิดว่าคุณเป็นคำตอบที่ดีที่สุดสำหรับคำถามของฉัน ฉันรู้สึกทราบซึ้ง; ขอบคุณมาก.
อิกนาชิโอ 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

มันใช้ได้ดีใช่ไหม Pabi พยายามอีกมาก
อิกนาชิโอ caviedes

1

รุ่นทุบตี

ไม่มีอะไรที่น่าตื่นเต้น - การแข่งขันที่เรียบง่ายของการห่วงกับเคาน์เตอร์i 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 ที่มหาวิทยาลัยของฉัน แก้ไขเล็ก ๆ ที่ฉันได้เพิ่มให้พอดีกับคำถามนี้คือการใช้อาร์กิวเมนต์บรรทัดคำสั่ง (แทนค่า hardcoding ลงในแหล่งที่มา)

$ 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;    
}

ค่อนข้างคล้ายกัน: askubuntu.com/a/621557/158442
muru

@muru ไม่เห็นมีคนโพสต์แล้ว ฉันอยู่ในขั้นตอนการเพิ่มเวอร์ชั่น C ของฉันด้วย จะดีไหมถ้าฉันเก็บ bash version เพิ่มเติมจาก C?
Sergiy Kolodyazhnyy

สบายดีโดยฉันไม่ทางใดก็ทางหนึ่ง
muru

หากคุณกำลังจะใช้ 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.