srand()
và rand()
trong stdlib.h
. Trong C++ 2 hàm này có sẵn trong iostream
.Hàm srand
Cú pháp:
void srand (unsigned int seed);
Dùng để khởi tạo một số ngẫu nhiên theo một số
seed
. Số ngẫu nhiên được tạo là pseudo-random, tức là số ngẫu nhiên giả, có thể đoán được số kế tiếp. Mỗi một số seed
sẽ cho ra một bộ số random khác nhau.Để cho mỗi số
seed
khác nhau người ta thường dùng kèm với unsigned int time(NULL)
trong thư viện time.h
, hàm time(NULL)
trả về số giây đã trôi qua kể từ ngày 1/1/1970.Hàm
srand()
thường được gọi trước khi gọi hàm rand()
.Hàm rand
Cú pháp:
int rand(void);
Trả về một số nguyên random giả trong khoảng từ 0 đến
RAND_MAX
. Hằng RAND_MAX
được định nghĩa trong stdlib.h
đảm bảo ít nhất bằng 32767.Nếu chỉ dùng hàm
rand()
thì sẽ cho ra những số random giống nhau mỗi lần chạy, vì vậy người ta thường khai báo srand(time(NULL))
trước để kết quả random mỗi lần mỗi khác nhau.Để lấy số ngẫu nhiên từ 0 đến
n
, ta sử dụng rand()%(n+1)
Để lấy số ngẫu nhiên từ
a
đến b
, ta sử dụng a + rand()%(b-a+1)
Ví dụ:
Code C:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a, b; srand(time(NULL)); printf("a = %d\n", rand()%100); //Ngẫu nhiên từ 0 đến 99 printf("b = %d\n", 50+rand()%51); // 50 đến 100 return 0; }Bonus thêm một số hàm hay dùng:
Hàm Random từ 0 đến n:
int Random(int n) { return rand()%(n+1); }
Hàm Random từ a đến b:
int Random(int a, int b) { return a + rand()%(b-a+1); }
Hàm Random số thực từ 0 đến n:
float Random(float n) { return n*rand()/RAND_MAX; }
Hàm Random số thực từ a đến b:
float Random(float a, float b) { return a + (b - a)*rand()/RAND_MAX; }
Hàm Random cho mảng một chiều:
void Random(int *a, int n) { for(int i = 0; i < n; i++) a[i] = rand(); }
Cho em hỏi muốn tạo số ngẫu nhiên từ 0 đến 1.5 thì làm thế nào ạ
Trả lờiXóaChào bạn,
XóaVới yêu cầu như trên thì chắc chắn số ngẫu nhiên cần khởi tạo là số thực. Tuy nhiên hàm rand() chỉ trả về số nguyên từ 0 đến RAND_MAX. Vậy để tạo số thực trong khoảng từ 0 đến 1.5 bạn có thể sử dụng công thức: rand()*1.5 / RAND_MAX.
Nhớ khai báo đầy đủ thư viện để dùng hằng RAND_MAX và dùng lệnh srand(time(NULL)) trước khi gọi hàm rand() nhé bạn.
Thân mến!
cho e hỏi muốn tao tên ngẫu nhien thì viet sao ạ
XóaPhần mềm trò chơi số ngẫu nhiên : http://123link.pw/XQsr0i
XóaCho em hỏi muốn lấy số ngẫu nhiên là số âm thì làm như thế nào?
Trả lờiXóaChỉ đơn giản là thêm dấu trừ vào trước toàn bộ công thức nhé bạn.
XóaVí dụ: Lấy số nguyên từ -n đến 0: -(rand()%(n+1))
Hoặc có thể dùng những hàm mình đã bonus ở trên nhưng lúc gọi bạn thêm dấu trừ vào trước.
Ví dụ: a = -Random(5); chẳng hạn.
Thân mến!
vừa số âm và số dương thì làm sao vậy bạn
Trả lờiXóaĐơn giản là sử dụng công thức random từ a đến b: a + rand()%(b-a+1)
XóaBạn chọn a là một số âm và b là một số dương nhé.
Lưu ý: phải chọn sao cho b-a < RAND_MAX nhé, nếu không công thức sẽ không chính xác.
Thân mến!
e có cái code này ak.giờ e muốn tìm hàng có chứa số 0 liên tiếp nhiều nhất thì phải làm sao ak
Trả lờiXóa#include
#include
#include
#include
#include
void main ()
{
int m,n,i,j,a[10][10],temp;
printf(" So hang n cua ma tran la: ");scanf("%d",&n);
printf(" So cot m cua ma tran la: ");scanf("%d",&m);
srand(time(NULL));
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
a[i][j]=rand()%2;
printf("ma tran ngau nhien la: \n");
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf(" %d",a[i][j]);
printf("\n");
}
for(i=1;i<=n;i++)
{
if(a[i]==0)
printf("\nhang thu %d co nhieu so 0 nhat",i);
}
getch();
}
Ở đây mình chỉ nói ý tưởng và bạn có thể dựa vào ý tưởng này để code.
XóaCó rất nhiều cách làm, thông dụng nhất là bạn có thể dùng một mảng phụ có n phần tử để đếm số lượng số 0 liên tiếp, sau đó tìm max của mảng phụ và in ra.
Trong 1 hàng có thể các số 0 liên tiếp nhau nhiều lượt thì bạn dùng biến tạm để đếm cho mỗi lượt và lấy lượt lớn nhất để lưu vào mảng phụ.
Thân mến!
cho e hỏi không trùng nhau làm sao vậy?
Trả lờiXóaý bạn là sao??
Trả lờiXóarandom tạo phân số ngẫu nhiên
Trả lờiXóap cho mình xin link đầy đủ cái phần Random được k?
Trả lờiXóaPhần thông tin về hàm srand() và rand() bạn có thể tra tại: http://www.cplusplus.com/
XóaCác công thức random là kinh nghiệm riêng của mình muốn chia sẻ đến mọi người.
Thân mến.
bạn cho mình hỏi là muốn random 2 phần tử i, j là 0 hoặc 1 thì làm thế nào
Trả lờiXóaDùng hàm random nguyên từ a đến b nhé bạn.
Xóai = Random(0,1);
j = Random(0,1);
ai chỉ mình random ra 1 cau lenh vs chảng hạn có 6 cau len muốn random 3 cau thui thỳ la s
Xóaai chỉ mình random ra 1 cau lenh vs chảng hạn có 6 cau len muốn random 3 cau thui thỳ la s
XóaCâu hỏi của bạn thật là ảo diệu :))) nhưng mà bạn có thể tìm hiểu thêm về con trỏ hàm, cách tạo mảng con trỏ hàm để random trong mảng đó.
XóaThân mến!
cho e hỏi ví dụ trong trò 2048 random ra 2 số 2 và 4 thì làm như nào ạ ?
Trả lờiXóaNếu bạn muốn random ra chỉ có số 2 và 4 thì rất đơn giản.
XóaCách 1: Xài hàm Random nguyên từ a đến b đã được bonus trên bài viết
int n = 2 * Random(1,2);
Cách 2: Random trên mảng.
int a[2] = { 2, 4 };
int n = a[Random(0,1)];
Thân mến!
bạn ơi minh muốn random ra một chuổi số bất kì.như 1-5 mình có thể biết trước số nào sẽ ra tiếp theo thi làm sao vậy bạn.có thể giúp mình được không
Trả lờiXóabạn ơi minh muốn random ra một chuổi số bất kì.như 1-5 mình có thể biết trước số nào sẽ ra tiếp theo thi làm sao vậy bạn.có thể giúp mình được không
Trả lờiXóaCảm ơn anh nha, nhờ bài viết của anh mà em hiểu ra bao nhiêu kiến thức về khởi tạo số ngẫu nhiên
Trả lờiXóasao mình gọi hàm srand rồi mà số random ra vẫn trùng nhau nhiều? bạn giải thích giúp mình với! thank you!
Trả lờiXóamuốn tính tổng của các số mình đã random ra thì làm sao nhỉ ??
Trả lờiXóamình muốn radom ra các số như 1,2 1,5 1,6 thì ntn bạn
Trả lờiXóahàm random từ a đến b nhưng muốn trả về chuỗi thì như thế nào ạ
Trả lờiXóaAnh admin oi e mun hoi tro game đường tăng trư bát giới tôn ngộ không ma may game quay e doan the nao de bit chinh xac a giup e dc ko vay e cam on a admin
Xóaanh ơi, để khởi tạo dãy nhị phân ngẫu nhiên thì làm sao ạ?em cảm ơn ạ
Trả lờiXóaem muoon tao mang 10000 phan tu ngau nhien vao file lam ntn a?
Trả lờiXóalàm sao để tăng tốc độ ngẫu nhiên nhỉ!!
Trả lờiXóaCho mình hỏi nếu muốn số ngẫu nhiên có số cuối 0 hoặc 5 thì đặt hàm thế nào.
Trả lờiXóacho e hỏi đoạn code dưới đây, tại sao e thêm hàm srand(time(NULL)) thì các biến a[0] tới a[4] lại giống nhau ạ, còn khi bỉ srand(time(NULL)) thì dc các biến khác nhau@@
Trả lờiXóa#include
#include
#include
int main()
{
int d,i,k,j,a[5];
for(k=0;k<5;k++)
{
//srand(time(NULL));
a[k]=rand()%200;
printf("a[%d]=%d \n",k,a[k]);
}
printf("in ra a[0] a[1] a[2] a[3] a[4] la: \n %d %d %d %d %d", a[0], a[1], a[2], a[3], a[4]);
}
Chaò bạn mình sử dụng hàm này để tạo số từ 0 tới n nhưng khi in ra thì không thấy có số 0 và n, cho mình hỏi cách tạo ra hàm số thực ngẫu nhiên từ 0 tới n có xuất hiện cả 0 và n trong đó, xin cảm ơn.
Trả lờiXóafloat Random(float n)
{
return n*rand()/RAND_MAX;
}
Mình có 3 số a=3, b=5, c=6
Trả lờiXóaMuốn random thì viết như thế nào ah
Trong khoảng %6 ah
Mình có 3 số a=3, b=5, c=6
Trả lờiXóaMuốn random thì viết như thế nào ah
Trong khoảng %6 ah
Như random(3) random (5) random (6) giúp mình viết code với
Mình muốn random 5 số ngẫu nhiên từ 0 đến 9 vị trí các số có thể trùng nhau thì ntn ạ
Trả lờiXóaad ơi ad cho e hỏi là e muốn random in ra 1 danh sách kề của đỉnh bất kì trong đò thị (cài đặt đồ thị bằng danh sách kề thì làm thế nào ạ?e tìm tài liệu trên mạng thì k có ạ.MOng a tl giúp e với :(
Trả lờiXóaMuốn tạo random từ 0-999 có thời gian 295 để xuất hiện số nguyên
Trả lờiXóaMuốn tạo random ngẫu nhiên trùng nhau từ 0-999 có thời gian 295 để xuất hiện số nguyên
Trả lờiXóaMuốn tạo random ngẫu nhiên trùng nhau từ 0-999 có thời gian 295 giây để xuất hiện số nguyên
Trả lờiXóaem muốn tạo một mảng với số phần tử n (min = 10 và max = 100) và các phần tử đều là ngẫu nhiên. Hiện tại phần random các phần tử đều ra kết quả tốt, tuy nhiên lúc em xuất mảng thì lại ra giá trị rác, không phải các giá trị đã random được ở trên. Nhờ ad xem giúp ạ, dưới đây là đoạn code của em:
Trả lờiXóa#include
#include
#include
int main(){
int a[100];int n; int k; int s; int i;
srand(time(NULL));
n = rand()%91 + 10; k = n + 10;
printf("So phan tu mang la: n = %d\n",n);
for (i=0;i<n;i++){
s = rand()%k;
printf("a[%d] = %d\n",i,s);
}
for (i=0;i<n;i++)
printf("%5d",a[i]);
return 0;
}
Cảm ơn ad nhiều ạ