假设法求最大值和数组的优点
Posted yfish
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了假设法求最大值和数组的优点相关的知识,希望对你有一定的参考价值。
给定一个数组,求数组中的最大值。
用假设法可解,思路是,把数组中随便一个元素设置为最大值,然后让其它元素和它比,如果比当前最大值大,那么最大值就被设置为这个元素,这个过程有点类似打擂台,共有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; }
数组从某些角度讲有优化代码的功能。
以上是关于假设法求最大值和数组的优点的主要内容,如果未能解决你的问题,请参考以下文章