Cách random ra cả số âm và số dương trong C++

Các anh chị có thể chỉ em cách Random cả âm cả dương không ạ
Capture
Em làm bằng cách này thì chỉ ra mỗi số dương ạ .
Em xin cảm ơn

Bạn vui lòng chép mã và đăng thay cho hình.


Có 2 cách:

  1. Ngẫu nhiên trong phạm vi từ a đến b. Trong đó a là số âm.
  2. Ngẫu nhiên dấu (1 hoặc -1) và nhân (*) với số vừa tạo ngẫu nhiên.
4 Likes
#include <random> // std::mt19937 và std::uniform_int_distribution
#include <ctime>  // time(0)

int main()
{
    // tạo 1 pseudo-random bit generator, "máy" tạo bit ngẫu nhiên
    std::mt19937 prbg{time(0)};

    // ngẫu nhiên 1 số thuộc đoạn [a, b] (bao gồm cả a và b), xài `prbg` tạo ở trên
    int x = std::uniform_int_distribution<int>{a, b}(prbg);
}
5 Likes

ngẫu nhiên ra số âm hoặc dương ví dụ số chẵn là dương, lẽ là âm

int dau = rand()&1 ?  -1 : 1;

xong rồi nhân với số dương random ra dc

a[i] = dau * (rand()%1000);

mình nghĩ nếu dùng lambda expression thì nhìn code có vẻ đẹp hơn nhưng mà cái này mình ko rành lắm

auto f = []{return (rand() % 1000) * (rand() & 1 ? 1 : -1);};
a[i] = f();
2 Likes

rand() Considered Harmful

từ năm 2 lẻ 3 đã kêu gọi bỏ rand() rồi :V Xài C++11 lambda mà nhét cái rand vào ngứa mắt lắm :V :V :V

5 Likes
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>

bool randChance(int chance)
{
    return rand() % 10000 < chance;
}

int main()
{
    srand(time(0));
    int N = 85000000;
    int chance = 1500; // 15% chance
    int success = 0;
    for (int i = 0; i < N; ++i)
        success += randChance(chance);
    
    std::cout << std::fixed << std::setprecision(2) << success * 100.0 / N << "%\n";
}

code này in ra 15% ở GCC, nhưng ở MSVC nó lại ra 18.31%, vì sao :V

3 Likes

ty ty
mình học ở trường ông thầy chỉ dạy C++ standard thôi, còn mấy cái lambda là mấy cái nice to have, thêm vào assignment thì dc bonus, nên ko biết mấy cái này lắm.
còn bây giờ thì cắm đầu vào python vì thấy dùng thoải mái hơn C++ nhiều

3 Likes

vọc Python cho sướng đi rồi về lại C++ nhanh gấp 50 lần =]]

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?