模拟法简介(蓝桥杯)

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

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

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

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

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

 

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

(2)数据存储问题 

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

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

   

 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);
 }

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

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个数中求最大值,及如何判断津津的不高兴条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值