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

      

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

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/yfish/p/9807235.html
Copyright © 2011-2022 走看看