excel 中某一列数如何找出第二大的数

excel 中某一列数如何找出第二大的数,第1张

假如数值在A1:A100,求数值:

一:max函数

第一大:=MAX(A1:A100)

第二大:=MAX(IF(A1:A100<MAX(A1:A100),A1:A100))

求出小于最大值数组,然后在数组中找到最大值,就是第二大了

二、large函数

用large函数

第一大:=LARGE(A1:A100,1)

第二大:=LARGE(A1:A100,COUNTIF(A1:A100,LARGE(A1:A100,1))+1)

求出最大值的个数n,并求出第n+1位的最大值。(因为large函数遇到数值相同的,第二大会和第一大相同)。

还能用函数找出数值多个时,在范围中出现位置:

比如刚才的公式在b5,则

第一次出现的位置:

=ADDRESS(MIN(IF(A1:A100=B5,ROW(A1:A100))),4)

或:

=ADDRESS(SMALL(IF(A1:A100=B1,ROW(A1:A100)),1),4)

最后一次出现的位置:

=ADDRESS(Max(IF(A1:A100=B5,ROW(A1:A100))),4)

或:

=ADDRESS(LARGE(IF(A1:A100=B1,ROW(A1:A100)),1),4)

同理,第二次出现的位置:

=ADDRESS(SMALL(IF(A1:A100=B1,ROW(A1:A100)),2),4)

倒数第二次出现的位置:

=ADDRESS(LARGE(IF(A1:A100=B1,ROW(A1:A100)),2),4)

需按Ctrl+Shift+Enter结束公式输入。

基本思想是遍历数组,并使用两个变量来存储当前遍历过的数中最大的两个数。这样当数组遍历完毕时两个变量存储的也是整个数组最大的两个数。代码如下:

int find_second_max(int *a, size_t n) //数组a,长度n>1

{

    /*用a[0]和a[1]来初始化max和second_max*/

    int second_max = a[0], max = a[0]

    if (a[1] > a[0]) max = a[1]

    else second_max = a[1]

    

    for (size_t i = 2 i < n ++i) {

        if (a[i] > max) max = a[i]

        else if (a[i] > second_max) second_max = a[i]

    }

    return second_max

}

如果不注重效率而只注重代码的简单,可以直接用C++的库函数sort对整个数组排序。代码如下:

#include <algorithm>

#include <vector>

int find_second_max(int *a, size_t n) //数组a,长度n>1

{

    std::vector<int> v(a, a + n)  //将a复制到v中

    std::sort(v.begin(), v.end()) //排序

    return v[n - 2]               //倒数第2个数就是第2大的数

}

#include <algorithm>

#include <vector>

int find_second_max(int *a, size_t n) //数组a,长度n>1

{

std::vector<int>v(a, a + n) //将a复制到v中

std::sort(v.begin(), v.end())//排序

return v[n - 2] //倒数第2个数就是第2大的数

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6422913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-21
下一篇 2023-03-21

发表评论

登录后才能评论

评论列表(0条)

保存