模拟法简介(蓝桥杯)

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

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

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

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

津津上初中了。妈妈认为津津应当更加用功地学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外,妈妈每周还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过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个数中求最大值,及如何判断津津的不高兴条件。

相关推荐
Emilia486.6 小时前
【Leetcode&nowcode】代码强化练习(二叉树)
算法·leetcode·职场和发展
墨染点香6 小时前
LeetCode 刷题【135. 分发糖果】
算法·leetcode·职场和发展
云青山水林8 小时前
零基础如何准备蓝桥杯
蓝桥杯
熬了夜的程序员11 小时前
【LeetCode】90. 子集 II
数据结构·算法·leetcode·链表·职场和发展·排序算法
熬了夜的程序员11 小时前
【LeetCode】91. 解码方法
算法·leetcode·链表·职场和发展·排序算法
熬了夜的程序员1 天前
【LeetCode】89. 格雷编码
算法·leetcode·链表·职场和发展·矩阵
程序员杰哥1 天前
Pytest之收集用例规则与运行指定用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
熬了夜的程序员1 天前
【LeetCode】87. 扰乱字符串
算法·leetcode·职场和发展·排序算法