有没有会用C++编写随机选择的函数?
举一个最简单的实例,比如说在1~36个数字里随机挑选出7个数字,就像买彩票那样.(我的家底只有11分,豁出10分来寻求你的答案了啊,还不快帮帮忙~~)...
举一个最简单的实例,比如说在1~36个数字里随机挑选出7个数字,就像买彩票那样.(我的家底只有11分,豁出10分来寻求你的答案了啊,还不快帮帮忙~~)
展开
2个回答
展开全部
#include<iostream>
#include<ctime>
#include<algorithm>
using namespace std;
int main(void)
{
int a[36];
int b[7];
for (int i = 0; i < 36; ++i)
{
a[i] = i + 1;
}
srand((unsigned int)time(NULL));
random_shuffle(a, a + 36);
copy(a, a + 7, b);
for (int i = 0; i < 7; ++i)
{
cout<< b[i] << " ";
}
cout<< "\n";
system("pause");
}
用了STL中的一个随机排列函数random_shuffle。有现成的为何不用呢?
#include<ctime>
#include<algorithm>
using namespace std;
int main(void)
{
int a[36];
int b[7];
for (int i = 0; i < 36; ++i)
{
a[i] = i + 1;
}
srand((unsigned int)time(NULL));
random_shuffle(a, a + 36);
copy(a, a + 7, b);
for (int i = 0; i < 7; ++i)
{
cout<< b[i] << " ";
}
cout<< "\n";
system("pause");
}
用了STL中的一个随机排列函数random_shuffle。有现成的为何不用呢?
展开全部
//只能用伪随机来实现,这是我们学校的一个作业题里用到的,没有规范化去写~
#include <iostream>
unsigned long a;
using namespace std;
#include <limits.h>//声明INT_MAX(Maximum (signed) int value)和ULONG_MAX(Maximum unsigned long value)常量
#include <windows.h>//声明GetTickCount()函数,其返回从开机到现在经过的毫秒数
/*
*不断用X= ((N*X+M)mod K )进行迭代计算
*那么得到的无穷多个x值,近似于在(0,K)上的均匀分布
*其中N,M,K为较大的数(N最好是素数).
*/
class TRandom
{
public:
TRandom (long seed=0) { mSeed=(seed?seed: GetTickCount());} //缺省使用系统时间(开机后经过的毫秒数)为种子
void Seed(long seed=0){ mSeed=(seed?seed: GetTickCount());} //也可以定义自己的种子
int Integer(){ return Next();} //取得一个随机的整数
int Integer(int min,int max){ return min+Next()%(max-min+1);} //取得一个在指定范围内的随机整数
double Real() {return double(Next())/double(INT_MAX);}//取得一个随机的(0到1之间的)小数
private:
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}//使用调和算法
int Next() //取得伪随机数发生器的随机数序列中的下一个随机整数
{
int loops=mSeed%3;
for(int i=0;i<=loops;i++)
Change();
return int(mSeed/2); //种子是unsigned long型的,mSeed/2恰好是int的最大值
}
unsigned long mSeed;//随机数发生器的种子
};
#include <iostream>
unsigned long a;
using namespace std;
#include <limits.h>//声明INT_MAX(Maximum (signed) int value)和ULONG_MAX(Maximum unsigned long value)常量
#include <windows.h>//声明GetTickCount()函数,其返回从开机到现在经过的毫秒数
/*
*不断用X= ((N*X+M)mod K )进行迭代计算
*那么得到的无穷多个x值,近似于在(0,K)上的均匀分布
*其中N,M,K为较大的数(N最好是素数).
*/
class TRandom
{
public:
TRandom (long seed=0) { mSeed=(seed?seed: GetTickCount());} //缺省使用系统时间(开机后经过的毫秒数)为种子
void Seed(long seed=0){ mSeed=(seed?seed: GetTickCount());} //也可以定义自己的种子
int Integer(){ return Next();} //取得一个随机的整数
int Integer(int min,int max){ return min+Next()%(max-min+1);} //取得一个在指定范围内的随机整数
double Real() {return double(Next())/double(INT_MAX);}//取得一个随机的(0到1之间的)小数
private:
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}//使用调和算法
int Next() //取得伪随机数发生器的随机数序列中的下一个随机整数
{
int loops=mSeed%3;
for(int i=0;i<=loops;i++)
Change();
return int(mSeed/2); //种子是unsigned long型的,mSeed/2恰好是int的最大值
}
unsigned long mSeed;//随机数发生器的种子
};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询