Mình cần phát sinh ngẫu nhiên một mảng chứa n
phần tử, các phần tử nằm trong khoảng từ 0
đến một số k
cho trước thì làm sao ạ?
Sử dụng hàm rand()
kết hợp với srand()
được định nghĩa sẵn trong <stdlib.h>
.
Lưu ý rand()
là một hàm tạo số ngẫu nhiên giả trong C, do đó nó cần một con số nào đó để bắt đầu, nếu con số bắt đầu không thay đổi, hàm rand()
cũng sẽ chỉ cho cùng 1 kết quả phát sinh mà thôi, hàm rand()
sẽ dựa vào srand()
để lấy con số bắt đầu này.
Cho nên, nếu bạn muốn mỗi lần chạy chương trình cho một kết quả phát sinh số ngẫu nhiên khác nhau (lần sau không giống với lần trước đó), bạn phải sử dụng srand()
với tham số đầu vào là time(NULL)
với mục đích là dùng thời gian làm con số bắt đầu, mà thời gian thì chỉ có một đi không trở lại, do đó sẽ tạo được các số ngẫu nhiên khác nhau.
Sau khi tạo được một số ngẫu nhiên, chỉ cần lấy số đó chia lấy dư với khoảng k
, bạn sẽ được một số ngẫu nhiên nằm trong khoảng từ 0
đến k
.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void initRandomArray(int *A, int n, int k) {
srand(time(NULL));
int randNum = 0;
for (int i = 0; i < n; i++) {
randNum = rand() % k;
A[i] = randNum;
}
}
int main() {
int *A;
int n = 10; /* Số lượng phần tử của mảng */
int k = 100; /* Mỗi phần tử có giá trị ngẫu nhiên nằm trong khoảng từ 0 đến k */
A = new int[n]; // Cấp phát bộ nhớ cho mảng A
initRandomArray(A, n, k);
/* Xuất mảng */
for (int i = 0; i < n; i++) {
printf("%4d", A[i]);
}
printf("\n");
delete[]A; // Free vùng nhớ sau khi sử dụng
return 0;
}