据说很多人不会造随机数,这里简单的说一下。
rand()
能生成一个在 [0,32767]
的数
需要随机种子 srand(time(0))
你可以理解为不加该随机种子无论你的代码运行多少遍都是一个结果,否则可以实现真正的随机
请注意需要添加的头文件为 <ctime>
和 <cstdlib>
,当然你可以直接使用万能头
下面是一个随机数的代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
srand(time(0));
int a,b;
a = rand() % 10000 + 1,b = rand() % 10000 + 1;
cout << a << " " << b << '\n' << a + b;
}
取模是因为我们只需要随机到 $10000$ 的数
那随机到 $10^8$ 怎么办呢?两种方法
1.rand()
组合数 就是 rand()
又相乘又相加,然后取模,简单省事
#include <bits/stdc++.h>
using namespace std;
int Rand(int x)
{
return (rand() * rand() - rand() * rand() + 114 * rand() + 1000000000) % x + 1;//随机数(你也可以随机别的,但注意太短了就不够随机)
}
int main()
{
srand(time(0));
int a,b;
a = Rand(100000000),b = Rand(100000000);
cout << a << " " << b << '\n' << a + b;
}
不够随机?那就第二种方法
2.拼接法 就是将两个 rand()
拼接在一起(不是乘法)随机化更高
#include <bits/stdc++.h>
using namespace std;
int Rand(int x)
{
return (rand() % 10000 * 10000 + rand() % 10000) % x + 1;
}
int main()
{
srand(time(0));
int a,b;
a = Rand(100000000),b = Rand(100000000);
cout << a << " " << b << '\n' << a + b;
}
类似的,$10^{12}$ 也能用这几种方法但切忌只开 int
如果随机数很多存不下怎么办?
(5赞更新)