Đăng bài - Hoặc quảng cáo vui lòng liên hệ TVN Group - hệ thống website chất lượng cao:

0989121911tvnseos@gmail.comZalo

Cách tạo dãy số ngẫu nhiên bằng các hàm Random trong C/C++

0

Cập nhật vào 11/07

Làm thế nào để tìm một con số hãy dãy số may mắn? Thông thường những con số may mắn với một người là những con số gắn liền với họ như ngày sinh, ngày kỷ niệm, số CMND,… Nhưng đôi khi những con số may mắn còn đến với bạn theo một cách ngẫu nhiên. Những người trúng giải độc đắc so xo an giang đã chia sẻ lại rằng họ lựa chọn các con số một cách ngẫu nhiên, không hề có sự tính toán. Vì vậy đôi khi các dãy số ngẫu nhiên có thể sẽ mang lại may mắn cho bạn. Vậy làm sao để tạo được số ngẫu nhiên cho mình? Các bạn có thể thử các hàm Random số trong C++ sau.

1. Cách sinh số nguyên ngẫu nhiên

Để sinh số nguyên trong lập trình C/C++. Chúng ta có thể sử dụng hàm rand(). Hàm này trả về một số nguyên có kiểu dữ liệu là int

Ví dụ:

Cách sinh số nguyên ngẫu nhiên

Kết quả chạy thử:

Cách sinh số nguyên ngẫu nhiên

Tuy nhiên, hàm rand() này sẽ không hề random ra các số mới khi bạn chạy code ở các lần sau. Nghĩa là, kết quả của code trên ở mọi lần chạy sẽ đều random ra 5 số giống nhau. Bạn có thể thử chạy đoạn code trên nhiều lần để kiếm chứng.

Với những người chơi xsmn thu 5 hang tuan thì hàm rand()  rất hữu ích khi giúp họ tìm được một con số may mắn một cách nhanh chóng. Ngoài ra còn rất nhiều ứng dụng khác mà bạn có thể nghĩ tới như quay thưởng trò chơi trúng thưởng,…

2. Sinh số ngẫu nhiên trong C/C++ với srand()

Để tạo ra các số ngẫu nhiên khác nhau tại mọi thời điểm chạy code, chúng ta sẽ thêm hàm srand() và truyền vào một tham số seed kiểu int. Tham số này thay đổi thì hàm srand() sẽ sinh ra các số khác nhau.

Ví dụ:

Sinh số ngẫu nhiên trong C/C++ với srand()

Trong trường hợp này, giá trị a vẫn sẽ không đổi ở các lần chạy do 123456 là một hằng số. Vậy, chúng ta sẽ cần truyền vào một giá trị động chứ không phải giá trị tĩnh 

Có một giải pháp tốt nhất là chúng ta sẽ truyền cho seed thời gian hiện tại. Bằng cách sử dụng hàm time() trong thư viện time.h. Hàm time() trả về kiểu time_t nhưng chúng ta có thể convert về int.

Sinh số ngẫu nhiên trong C/C++ với srand()

Bằng cách thêm hàm này trước khi gọi hàm rand(), chúng ta đã có thể sinh số ngẫu nhiên khác nhau.

Một ví dụ cụ thể:

Sinh số ngẫu nhiên trong C/C++ với srand()

Kết quả chạy thử:

Sinh số ngẫu nhiên trong C/C++ với srand()

Ok, đã giải quyết được bài toán sinh số ngẫu nhiên cơ bản. Nhưng nếu tôi muốn sinh số ngẫu nhiên trong đoạn [min, max] thì phải làm thế nào?

3. Sinh số ngẫu nhiên trong đoạn [min, max]

Có thể các bạn thừa biết, phép toán chia dư (%) của mọi số bất kỳ(a) cho một số b cố định: a % b sẽ cho ra giá trị thuộc đoạn [0, b-1]. Ta sẽ lợi dụng tính chất này để sinh số ngẫu nhiên trong đoạn [minN, maxN] như sau:

Sinh số ngẫu nhiên trong đoạn [min, max]

Như vậy, nếu bạn muốn sinh số ngẫu nhiên trong C++ trong đoạn [5,10], bạn làm như sau:

Sinh số ngẫu nhiên trong đoạn [min, max]

Dưới đây là một ví dụ cụ thể, tôi sẽ viết hàm random thành 1 hàm con để các bạn có thể tiện sử dụng.

Sinh số ngẫu nhiên trong đoạn [min, max]

Kết quả chạy thử:

Sinh số ngẫu nhiên trong đoạn [min, max]

Kết quả sinh số ngẫu nhiên trong đoạn [minN, maxN]

4. Sinh số thực ngẫu nhiên trong đoạn [min, max]

Dưới đây là hàm giúp các bạn sinh số thực ngẫu nhiên trong đoạn [min, max].

Sinh số thực ngẫu nhiên trong đoạn [min, max]

Về cơ bản ý tưởng vẫn sử dụng hàm rand. Sau đó chia cho RAND_MAX để được số thực. Vì RAND_MAX là số lớn nhất mà hàm rand(), nên kết quả thu được sẽ là số thực trong đoạn [0, 1]. Chúng ta cần xử lý thêm một chút để thu được giá trị trong đoạn [min, max].

5. Sinh số ngẫu nhiên kiểu long long

Trong một số trường hợp, bạn có thể sẽ cần random số ngẫu nhiên lớn hơn kiểu int. Khi đó, bạn có thể sử dụng hàm random kiểu long long int này. Dưới đây là code các bạn tham khảo:

Sinh số ngẫu nhiên kiểu long long

Để tạo các dãy số ngẫu nhiên trong C/C++ cũng không có gì khó khăn. Bằng những cách trên hi vọng bạn sẽ tìm được con số may mắn cho mình. Chúc các bạn thành công.

Share.

Comments are closed.