模拟法简介(蓝桥杯)

模拟法,顾名思义,就是利用计算机模拟问题的求解过程,从而得到问题的解。模拟法由于简单,因此又被称为"不是算法的算法"!

模拟法是学习算法的基础,通过模拟可以学习编程的各类技巧,提升初学者建立各种编程逻辑模型的感觉。大部分模拟题目直接摸拟就可以求解,还有少量模拟题目需要考生简化模拟过程,否则可能会使逻辑复杂,导致求解用时过长。

模拟法适用于问题求解清晰,运算规模较小的问题。如果问题求解的时空代价很大,就要考虑是否有其他更好的解决方案。

【案例解析】不高兴的津津

津津上初中了。妈妈认为津津应当更加用功地学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外,妈妈每周还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过8小时就会不高兴,而且上得越久就越不高兴。假设津津不会因为其他事不高兴,并且她的不高兴不会持续到第2天。请你帮忙检查津津下周的日程安排,看看她下周会不会不高兴;如果会,那么她哪天最不高兴。

输入包括7行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出一个数字。如果津津不会不高兴,则输出0,如果会,则输出最不高兴的是周几(用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的那一天。

例如,输入下列数据:

5 3

6 2

7 2

5 3

5 4

0 4

0 6

则输出为3。

本题可以采用模拟方法依次判断哪天最不高兴,并将最不高兴的那一天输出。在输出过程中要注意以下几个问题。

(1)判断n个数中的最大值

cpp 复制代码
max = 0;
for(i = 1; i <= n; i++)
{
	scanf("%d",&a);
	if(a > max)
	{
		max = a;
	}
 } 

(2)数据存储问题

本题的数据一共有7组,不算多,也不算少,可以直接运算,也可以将数据存储到数组后再进行计算。

若不采用数组,则模拟的过程如下。

cpp 复制代码
 int a,b,s,max = 0,i,day = 0;
 for(i = 1;i <= 7; i++)
 {
 	scanf("%d%d",&a,&b);
 	s = a+ b;
 	if((s > max) && (s > 8))
 	{
 		max = s,
 		day = i;
	 }
	 printf("%d",day);
 }

如果采用数组,则可以将数据存储起来,在后续的操作中会更加方便,也更容易理解。采用数组模拟的方法如下。

cpp 复制代码
int a,b,i,day,max,array[8];
char c;
for(i = 1; i <= 7; i++)
{
	scanf("%d%d",&a,&b);
	array[i] = a + b;
}
max = array[0];
for(i = 1; i<= 7;i++)
  {
  	if(max < array[i])
     {
     	max = array[i];
     	day = i;
	 }
	  
  }
  if(max > 8)
     printf("%d",day);
  else
     printf("%d",0);

模拟法一般都不难,但也会考查一些基础算法,例如本题考查了如何在n个数中求最大值,及如何判断津津的不高兴条件。

相关推荐
不想当程序猿_5 小时前
【蓝桥杯每日一题】扫雷——暴力搜索
算法·蓝桥杯
清弦墨客5 小时前
【蓝桥杯】43696.小数第n位
java·c语言·c++·python·蓝桥杯
TT哇6 小时前
*【每日一题 基础题】 [蓝桥杯 2024 省 B] 好数
java·蓝桥杯
m0_749317528 小时前
蓝桥杯练习生第四天
java·算法·职场和发展·矩阵·蓝桥杯
“αβ”11 小时前
[蓝桥杯 2019 国 B] 排列数
职场和发展·蓝桥杯
钱钱钱端15 小时前
软件测试工程师面试整理 —— 编程与自动化!
自动化测试·软件测试·selenium·测试工具·面试·职场和发展
钱钱钱端15 小时前
技术分享 —— JMeter接口与性能测试实战!
自动化测试·软件测试·python·jmeter·职场和发展·压力测试·性能测试
TANGLONG22216 小时前
【初阶数据结构与算法】八大排序算法之交换排序(冒泡排序,快速排序---hoare、挖坑法、lomuto双指针3种版本)
c语言·数据结构·c++·算法·面试·蓝桥杯·排序算法
GSDjisidi17 小时前
日本IT行业|分享实用的开发语言及框架
java·开发语言·python·面试·职场和发展