随机数函数学习心得
首先我们要了解
rand有什么用
1.当你不会做题时,甚至连暴力都不会打,rand函数就可以看你人品得分(bushi)
2.rand函数也可以用来写对拍!!!
rand函数基本用法
首先,大家得知道一个东西:
0 <= rand () <= 32767
其次,就是重要内容!!!
int a = rand ();
没错,就是这么简单粗暴
但是要注意的是, rand函数必须要加
#include <cstdlib>
(这个蒟蒻一直不知道怎么打)
但是,当我们上机实测却发现,它每次都是输出相同的值
这时候,是一个很重要的东西没加
它就是:
srand (time (0)/srand (time (NULL)
但是又要注意的是, rand函数必须要加
#include <ctime>
实机操作
问题:输出10个随机值 0 <= a <= 999
分析:没什么可分析的,只需要一个rand() 即可完成此题
Code:
#include <iostream>
#include <cstdlib>
#include <ctime>
//也可以使用万能头
using namespace std;
int main ()
{
srand (time (0));//特别重要!!!
for (int i = 1; i <= 10; i ++ )
{
int a = rand () % 1000;//mod 1000就保证了数据范围0~999
cout << a << " ";
}
return 0;
}
其中的两次输出 !
这两个输出显然不一样
最后,给大家展现一些阴间操作
在前文已经说过了rand() 函数取值范围为1~32767
那么就有两个问题:
1.如何打出小于0的随机数?
2.如何打出大于32767的随机数?
其实,这两个问题是肥肠煎蛋的
只需要用比较小的随机数-比较大得随机数,这个问题就得以解决了
同理,二问只需要用两个随机数相加也就得以解决了
上代码
Code:
1:a = rand () % 1000 - rand () % 2000 - 1000;//减1000是为了**防止999 - 0**的情况发生
2:a = rand () % 32767 + rand () % 32767;
接着, 再介绍一个比较阴间的STL函数
random_shuffle
它的作用就只有一个:打乱原数组
应用题型:写一些需要打乱数组的对拍
Code:
#include <bits/stdc++.h>//可以用万能头
using namespace std;
const int N = 1010;
int n, a[N];
int main()
{
srand (time (0));//初始化
cin >> n;
for (int i = 1; i<= n; i ++ )
cin >> a[i];
random_shuffle (a + 1, a + n + 1);//调用函数
for (int i = 1; i <= n; i ++ )
cout << a[i] << ' ';
return 0;
}
输出:
----------------一条不怎么华丽的结束线----------------
Orzzzz