zoukankan      html  css  js  c++  java
  • 假设法求最大值和数组的优点

    给定一个数组,求数组中的最大值。

    用假设法可解,思路是,把数组中随便一个元素设置为最大值,然后让其它元素和它比,如果比当前最大值大,那么最大值就被设置为这个元素,这个过程有点类似打擂台,共有N个人打擂台,其中一个人说,我是最厉害的,然后后面一个人把他打败了,它就编程最大的了,前面就被淘汰了,擂台上始终是当前最厉害的,那么最后留在擂台上的就是最厉害的。

    想出假设法的人真的很聪明啊,我怎么想不到呢?

    假设是4个整型变量,那么有以下代码

    int a,b,c,d

    int max=a;

    if(b>=max)

    max=b;

    if(c>=max)

    max=c;

    if(d>=max)

    max=d;

    发现没有,这三段if代码很相似,但似乎不会有简便的办法了。

    如果把这四个变量放到数组中,那么我们可能会写出这样的代码:

    int main(void)
    {
    	int num[] = { 35,34,67,67};
    	int max = num[3];
    	
    	
    		if (num[0] >= max)
    		{
    			max = num[0];
    		}
    		if (num[1] >= max)
    		{
    			max = num[1];
    		}
    		if (num[2] >= max)
    		{
    			max = num[2];
    		}
    		if (num[3] >= max)
    		{
    			max = num[3];
    		}
    
    	printf("max=%d",max);
    	return 1;
    }
    

      

    可以发现几段if代码就是数组索引不一样,其它地方都一样,如下图:

    数组索引是一个常数,我们可以用一个变量i来代替它,然后让i的值从0开始,每次加1这样变化,for循环正是有这样的功能。

    于是代码可以被优化成下面这样。

    int main(void)
    {
    	int num[] = { 35,34,67,67};
    	int max = num[3];
    	
    	for (int i = 0; i <= 3; i++)
    	{
    		if (num[i] >= max)
    		{
    			max = num[i];
    		}
    	}
    		
    	printf("max=%d",max);
    	return 1;
    }
    

      

    数组从某些角度讲有优化代码的功能。

  • 相关阅读:
    ch_5102 Mobile Service
    ch_POJ1201 Intervals
    [CodeVs]谁是赢家
    树上莫队
    [NOI2009]管道区珠
    拉格朗日差值
    Simpson&自适应Simpson
    数论学习笔记
    hibernate FetchType理解
    Hibernate的generator属性之意义
  • 原文地址:https://www.cnblogs.com/yfish/p/9807235.html
Copyright © 2011-2022 走看看