c - 不使用数组从 n 个数中取最大的三个数

标签 c arrays data-structures max

我需要在不使用数组、列表之类的结构的情况下从 n 个数字中识别出最大的三个元素,我不应该使用任何排序逻辑。我在 C 程序中做了类似的事情。有什么方法可以更有效地做到这一点?

#include <stdio.h>
    int main()
    {
       int n;
       scanf("%d",&n);
       int number;
       scanf("%d",&number);
       int firstMax, secondMax, thirdMax;
       firstMax = secondMax = thirdMax =number;
       for(int i = 1; i<n ; i++){
           scanf("%d",&number);
           if(number > firstMax){
               thirdMax = secondMax;
               secondMax = firstMax;
               firstMax = number;
           }
           else if(number > secondMax){
               thirdMax = secondMax;
               secondMax = number;
           }
           else if(number > thirdMax){
               thirdMax = number;
           }
       }
       printf("%d %d %d",firstMax, secondMax, thirdMax);
       return 0;
    }

最佳答案

您可以从与thirdMax 比较开始。如果这是错误的,则无需考虑所有其他内容。

if (number > thirdMax)
{
    if (number > secondMax)
    {
        thirdMax = secondMax;
        if (number > firstMax )
        {
            secondMax = firstMax;
            firstMax = number;
        }
        else
        {
            secondMax = number;
        }
    }
    else
    {
        thirdMax = number;
    }
}

关于c - 不使用数组从 n 个数中取最大的三个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47248231/

相关文章:

c - scanf和format有关吗?

支持pop oldest inserted和max的C++数据结构

java - 二叉树的前序遍历。如果与同时

C++ 使用 vector 的二叉树

c - LFS 5.7.Glibc-2.29 的完整性检查失败

c - C 字符数组或字符串中的变音符号

c - 如何在 C 中递增语句或递减语句?

c# - 如何创建 C# 按钮数组?

c++ - [] C++中get和set操作的运算符重载

javascript - 使用 JavaScript,如何将使用 forEach() 解析的两个数组中的项目组合成单个字符串?