赞
踩
直接利用函数中定义数组变量不赋值自动随机赋值的特性来写。
- #include <iostream>
- using namespace std;
- int main()
- {
- int a[1],n; cin>>n;
- a[0]%=n; //n为范围,最多随机到n-1
- cout<<a[0]<<endl;
- return 0;
- }
但是这有个缺陷,输入同样范围回答一样。
srand(unsigned)中unsigned填起始随机范围不填就是1;
rand(void)void不填后面%(n+1)(n是最大随机到的数)。
没有%范围就没有,所以会获得任何数字结果。
(需调用cstdlib库)
好,我们试一下:
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int main()
- {
- srand(0);
- int n; cin>>n;//n为范围,最多随机到n
- cout<<rand()%(n+1)<<endl;
- return 0;
- }
回答都是一个数字!!!
所以需要调用熟悉的ctime库利用每个时间的不同数字的特性来初始srand。
srand(time(0));
再rand()%(n+1)。
那怎么指定最小随机值呢?有个公式:
最小值+rand()%(最大随机值+1-最小值)
好,再来:
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- int main()
- {
- srand(time(0));
- int n1,n2; cin>>n1>>n2;
- //n2为最大随机值,最多随机到n2;n1为最小随机值,最小随机到n1
- cout<<n1+rand()%(n2+1-n1)<<endl;
- return 0;
- }
输出:
随机了!!!
这就成功了。
default_random_engine 类,其他类需它帮助。
直接使用:
- #include <iostream>
- #include <ctime>
- #include <random>
- using namespace std;
- //直接使用只能从所有正整数中随机
- int main()
- {
- default_random_engine a;
- a.seed(time(0));
- cout<<a()<<endl;
- return 0;
- }
uniform_int_distribution类。
<>中填整数类数据类型。
- #include <iostream>
- #include <ctime>
- #include <random>
- using namespace std;
- int main()
- {
- default_random_engine a;
- int c,d; cin>>c>>d; //c最小随机值,d最大随机值
- uniform_int_distribution<int> b(c-1,d+1);
- // 注意了!!!左闭右闭区间(不包含表示范围的两个数字)
- a.seed(time(0));
- cout<<b(a)<<endl;
- return 0;
- }
输出:
uniform_real_distribution类。
<>中填实数类数据类型。实数即有小数部分的数,0.1、1000.92就是典型。
- #include <iostream>
- #include <ctime>
- #include <random>
- using namespace std;
- int main()
- {
- default_random_engine a;
- double c,d; cin>>c>>d; //c最小随机值,b最大随机值
- uniform_real_distribution<double> b(c-1,d+1);
- //注意左闭右闭区间
- a.seed(time(0));
- cout <<b(a)<<endl;
- return 0;
- }
输出:
normal_distribution类。
<>中填实数类数据类型。()中第一个填均值,第二个填标准差。
- #include <iostream>
- #include <ctime>
- #include <random>
- using namespace std;
- int main()
- {
- default_random_engine a;
- double c,d; cin>>c>>d; //均值为c,标准差为d
- normal_distribution<double> b(c,d);
- a.seed(time(0));
- cout<<b(a)<<endl;
- return 0;
- }
输出:
bernoulli_distribution类。
没有<>,()中填生成1的概率。填百分比,但并不是100%、83%,是它们的数值。如100%是1,83%是0.83。
- #include <iostream>
- #include <ctime>
- #include <random>
- using namespace std;
- int main()
- {
-
- default_random_engine a;
- double c; cin>>c; //c是生成1的概率
- bernoulli_distribution b(c);
- a.seed(time(0));
- cout<<b(a)<<endl;
- return 0;
- }
输出:
--------------------------------------------------------------------------------------------------------------------------------
完
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。