模拟算法是一种最基本的算法思想,是对程序员基本编程能力的一种考查,其解决方法就是根据题目给出的规则对题目要求的相关过程进行编程模拟。在解决模拟类问题时,需要注意字符串处理、特殊情况处理和对题目意思的理解。我们知道在C语言中,通常使用函数srand()和rand()来生成随机数。其中函数srand()用于初始化随机数发生器,然后使用函数rand()来生成随机数。如果要使用上述两个函数,则需要在源程序头部包含time.h文件。在程序设计过程中,可使用随机函数来模拟自然界中发生的不可预测情况。在解题时,需要仔细分析题目给出的规则,要尽可能地做到全面地考虑所有可能出现的情况,这是解模拟类问题的关键点之一。
下面通过一个简单的例子说明模拟算法的思想:
猜数字游戏:用计算机实现一个随机数1到100之间的数字,然后由用户来猜这个数,根据用户的猜测数量分别给出不同的提示
代码如下:
//start from the very beginning,and to create greatness
//@author: Chuangwei Lin
//@E-mail:979951191@qq.com
//@brief: 模拟猜数字游戏
#include <time.h>
#include <stdio.h>
int main()
{
int n,m,i=0;
int max=100,min=1;//用于比较数字范围
srand(time(NULL));//初始化随机数发生器
n=rand() % 100 + 1;//产生1到100的随机数
do{
printf("%d<目标数<%d哦!输入你猜的数字:",min,max);
scanf("%d",&m);
i++;//统计猜数字的次数
if (m>n)
{
printf("您所猜的数字太大了!
");
max = m;//刷新最大值
}
else if(m<n)
{
printf("您所猜的数字太小了!
");
min = m;//刷新最小值
}
}while(m!=n);
printf("回答正确!
");
printf("共猜测了%d次。
",i);
if(i<=5)
printf("你太聪明了,这么快就猜出来了!
");
else if(i>5)
printf("还需改进方法,以便更快猜出来!呵呵
");
return 0;
}
运行结果: