ฉันต้องการที่จะสร้างพูดว่า 10 ตัวเลขสุ่มระหว่าง 100 และ 200 (รวมทั้งสอง) ฉันจะทำมันด้วยแรนด์ได้อย่างไร
ฉันต้องการที่จะสร้างพูดว่า 10 ตัวเลขสุ่มระหว่าง 100 และ 200 (รวมทั้งสอง) ฉันจะทำมันด้วยแรนด์ได้อย่างไร
คำตอบ:
ถ้าคุณหมายถึง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 ถึงมัน
การใช้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)
)
นี่เป็นวิธี 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
คุณยังสามารถใช้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
ด้วยshuf
จาก GNU coreutils:
$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139
$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
ไม่มีอะไรที่น่าตื่นเต้น - การแข่งขันที่เรียบง่ายของการห่วงกับเคาน์เตอร์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 ที่มหาวิทยาลัยของฉัน แก้ไขเล็ก ๆ ที่ฉันได้เพิ่มให้พอดีกับคำถามนี้คือการใช้อาร์กิวเมนต์บรรทัดคำสั่ง (แทนค่า 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;
}
random
ห้องสมุด: stackoverflow.com/a/19728404/2072269 , stackoverflow.com/a/19666713/2072269
rand
อะไรRANDOM
ตัวแปร?/dev/random
?/dev/urandom
?