数据结构与算法之模拟算法 C++实现
2014-11-15 20:21
176 查看
模拟算法:模拟整个过程,通过改变数学中模型的各种参数,进而观察变更这些参数所引起过程状态的变化。
算法思路:使用随机函数来模拟自然界中发生的不可预测情况。(srand() 和 rand()函数生成随机数)
模拟算法也就是将整个过程完完整整的走一遍,题目怎么叙述的,程序就怎么运行。
实例一:猜数字
计算机随机生成一个1-100的整数,用户猜测,每次猜测给出不同的提示。
代码:
运行结果:
实例二:模拟掷骰子游戏
由用户自己输入参与人数和骰子的个数,然后计算机随机生成每一粒骰子的点数然后统计每个人的点数。
代码:
运行结果:
注:
C++产生随机数的用法
1) 给srand()提供一个种子,它是一个unsigned int类型;
2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
产生一定范围随机数的通用表示公式
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
算法思路:使用随机函数来模拟自然界中发生的不可预测情况。(srand() 和 rand()函数生成随机数)
模拟算法也就是将整个过程完完整整的走一遍,题目怎么叙述的,程序就怎么运行。
实例一:猜数字
计算机随机生成一个1-100的整数,用户猜测,每次猜测给出不同的提示。
代码:
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int main() { srand(time(NULL)); int count=0; int num = rand()%100 + 1; int guess; cout << "请输入猜测的数值:"; cin >> guess; do{ if (guess > num){ count++; cout << "您猜的值大了\n"; cout << "请再次输入猜测的数值:"; cin >> guess; }else if (guess < num){ count++; cout << "您猜的值小了\n"; cout << "请再次输入猜测的数值:"; cin >> guess; } }while(guess != num); count++; cout << "猜中了!\n"; cout << "共猜了 " << count << " 次\n"; return 0; }
运行结果:
实例二:模拟掷骰子游戏
由用户自己输入参与人数和骰子的个数,然后计算机随机生成每一粒骰子的点数然后统计每个人的点数。
代码:
#include<iostream> #include<stdlib.h> #include<time.h> using namespace std; void play(int n); void play(int n) { int i,m=0,t=0; for(i=0; i<n; i++) { t=rand()%6+1; m+=t; cout << "第" << (i+1) << "粒骰子的点数为:" << t <<"\n"; } cout << "总共" << m << "点\n"; } int main() { int people,numbers; do{ srand(time(NULL)); cout << "请输入参与的人数:"; cin >> people; if(people == 0) break; cout << "请输入骰子的数量:"; cin >> numbers; if(numbers == 0) break; for(int i=0; i<people; i++) { cout << "第 " << (i+1) << "位选手掷出的骰子情况为:\n"; play(numbers); } }while(1); return 0; }
运行结果:
注:
C++产生随机数的用法
1) 给srand()提供一个种子,它是一个unsigned int类型;
2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
产生一定范围随机数的通用表示公式
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
相关文章推荐
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- 算法数据结构C++实现8 堆排序 难点分析
- 【数据结构&&等差数列】KMP简介和算法的实现(c++ && java)
- 数据结构与算法——最短路径Dijkstra算法的C++实现
- 经典算法与数据结构的c++实现——直接选择排序
- 数据结构与算法之—顺序栈c++面向对象实现
- 数据结构与算法之递推算法 C++与PHP实现
- 经典算法与数据结构的c++实现——冒泡排序
- 【数据结构&&等差数列】KMP简介和算法的实现(c++ && java)
- 数据结构复习:几种排序算法的C++实现和二叉树的相关算法实现
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- 算法与数据结构基础10:C++实现——拓扑排序
- 摘:数据结构各种算法实现(C++模板)
- 经典算法与数据结构的c++实现——插入排序
- 算法与数据结构课程中的c++实现的顺序表和链表
- 用C++实现数据结构中的各种算法
- 算法与数据结构基础6:C++队列的简单实现
- 算法与数据结构基础9:C++实现有向图——邻接矩阵存储
- 数据结构与算法——AVL树类的C++实现
- 经典算法与数据结构的c++实现——shell排序算法