关于随机数的一点小结
2014-04-13 22:28
239 查看
关于随机数在前面的扫雷程序中用到过,下面是扫雷程序中的一段代码:
srand((unsigned)time(0)); //设置m_iMineNum个雷 do { //以当前秒数为产生随机算法 int k=(rand())%m_RowCount; int l=(rand())%m_ColCount; //为了避免一个位置同时算两个雷 //只允许当前位置不是雷时赋值为雷 if(m_Mine[k][l].iArondMineNum != -1) { //这个位置有雷 m_Mine[k][l].iArondMineNum = -1; aa++; } }while(aa!=m_iMineNum);避免同一个等级布雷出现相同的情况。在网上看到了一些关于随机数的几个算法,在这里做一个小结,后续再接着完善。
// Rand.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <time.h> #include <stdlib.h> #include <algorithm> #include <set> using namespace std; inline void exchange(int *arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //一般的rand()产生2^15次方的数量级 //产生一个较大的随机数(到2^30数量级) int bigrand() { return (RAND_MAX)*rand()+rand(); } //产生一个在区间[l, h]之间的随机数 int randint(int l, int h) { return l+bigrand()%(h-l+1); } //产生m个在[0,n-1]之间的有序的随机数 //Knuth法: //时间O(n), 空间O(1) void randsortedint_knuth(int m, int n) { for (int i = 0; i < n; i++) { if(bigrand() % (n-i) < m) { cout << i << "/n"; m--; } } } //产生m个在[0, n-1]之间的有序的随机数 //弄乱数组法: //时间O(m*logm), 空间O(n) void randsortedint_shuffer(int m, int n) { int *arr = new int ; for(int i = 0; i < n; ++i) arr[i] = i; for(int i = 0; i < m; ++i) exchange(arr, i, randint(i, n-1)); sort(arr, arr+m); for(int i = 0; i < m; ++i) cout << arr[i] << endl; } //产生m个在[0,n-1]之间的有序的随机数 //floyd法: //时间:O(m*logm), 空间O(m) void randsortedint_floyd(int m, int n) { //容器 set<int> s; for(int i = n-m; i < n; i++) { int t = bigrand()%(i+1); if(s.find(t) == s.end()) s.insert(t); else s.insert(i); } for(set<int>::iterator i = s.begin(); i != s.end(); ++i) cout << *i << endl; } int _tmain(int argc, _TCHAR* argv[]) { int i=srand(unsigned(time(NULL))); system("pause"); return 0; }
相关文章推荐
- 关于随机数的一点新的小发现
- 关于设计的一点小结
- C++中关于const, reference(&)一点小结
- 关于页面编码一点小结
- 关于斐波那契数列的一点小结
- DevExpress GridControl 关于使用CardView的一点小结
- 关于ssh开发的一点小结
- 关于C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- 关于windows程序相关基础技术的一点小结(1.文件读写篇)
- c#学习中关于new和override的一点小结
- 关于随机数的一点心得
- 关于平面战机射击游戏的一点小结
- 关于Matlab绘图的一点基础小结
- 关于存储过程的一点小结
- Android关于selector.xml用法的一点小结
- 关于JSP的一点疑问小结
- 关于C语言中结构体与共用体的一点小结体会(一)
- 关于Oracle数据库的一点小结
- 关于学习Flex皮肤的一点小结
- 关于textbox输入限制的一点小结