编译环境为:vs2013
产生1到3的整型随机数的代码如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define max 3 //这个函数的意义为:随机生成最大的数为3
#define min 1 //这个函数的意义为:随机生成最小的数为1
int main()
{
int num
srand(time(0))
num = rand() % (max - min) + min // 这里的意义,“%”为模运算
printf("随机数为:%d\n", num)
system("pause") //这个代码可以让d出的黑框不会一下就消失
return 0
}
扩展资料:
根据密码学原理,随机数的随机性检验可以分为三个标罩棚仔准:
条件一、统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。
条件二、密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不物汪能有效的演算出随机样本的剩余部分。
条件三、真随机性。其定义为随机样本不可重现和嫌。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。
随机数分为三类:
①伪随机数:满足第一个条件的随机数。
②密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器
计算得出。
③真随机数:同时满足三个条件的随机数。
源程序代码以及算法解释如下:
产生1-10随机数程序:
#include <iostream>
#include <time.h>
using namespace std
int main()
{
const int n = 10//定义随机数个数
int number[n] = { NULL }//定义随机数存储的数组伍举兄
srand((unsigned)time(NULL))//初始化随机函数
number[0] = rand() % n//第一个随机数无需比较
cout <<number[0] <<" "
for (int i = 1i <ni++)//其余随机数循环产生
{
int j = 0
number[i] = rand() % n//产生随机数
while (1)
{
if (number[i] == number[j])//若有相同则继续循环重新安排随机数
{
number[i] = rand() % n//产生随机数
j = 0//若遇到相同的就从头遍历
continue
}
if (j == (i - 1))//若遍历完就跳出
break
j++
}
cout <<number[i] <<" "
}
cout <<endl
return 0
}
程序运行结果如下:
扩展资料:腔袭
利用vector进行随机数输出:
#include <iostream>
#include <vector>
#include <time.h>
using namespace std
int main()
{
const int n = 10
int randnum
vector<int>number
for (int i = 0i <ni++)
{
number.push_back(i + 1) //从尾部添加元素
cout <<number[i] <<" "
}
cout <<endl
srand((unsigned)time(NULL))
for (int j = 0j <nj++) //其余随机数答蔽循环产生
{
randnum = rand() % (n - j) //rand函数生成的随机数是0-(n-1)
cout <<number.at(randnum) <<" "
number.erase(number.begin() + randnum)
}
cout <<endl
return 0
}
首先要确定这100个数的范围,比如0-99。
然后抽取随机数,并利用模除限定范围,每当抽取到一个新的数时,同历史数据比较,如果有重复则放弃。 直到抽取哗罩到不重复的10个数为止。
示例代码如下:
#include <stdio.h>#include <stdlib.h>
#include <time.h>
int main()
{
int a[10] // 存储结果。
int i, j
srand(time(NULL))//通过获取时间值来设定随机数种子,以保证每次运行结果不同。
for(i = 0 i <搜芦态 10 )//注意,第三世源项留空,因为需要判断每次得到的数值是否重复,如重复则不进行i的自加
{
a[i] = rand()%100 //得到一个0-99中的随机数。
for(j = 0 j < i j ++)
if(a[j] == a[i])break//发现重复,结束内循环
if(j == i) i ++//如果i和j相等,代表内循环是达到条件退出的,即不是通过break,也就是没有重复项。
}
for(i = 0 i < 10 i++) //输出得到的数值。
printf("%d,", a[i])
printf("\n")
return 0
}
以下是运行该程序三次分别得到的结果(每行一次),可以看到是实现了所有功能的。
96,84,85,30,29,97,92,51,38,81,49,42,13,18,24,1,75,91,60,5,
68,16,23,79,17,59,83,82,34,70,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)