Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不使用数组的n个数中的最大三个数_C_Arrays_Data Structures_Max - Fatal编程技术网

C 不使用数组的n个数中的最大三个数

C 不使用数组的n个数中的最大三个数,c,arrays,data-structures,max,C,Arrays,Data Structures,Max,我需要从n个数字中找出最大的三个元素,而不需要使用数组、列表结构,也不应该使用任何排序逻辑。有没有办法更有效地做这件事 #include <stdio.h> int main() { int n; scanf("%d",&n); int number; scanf("%d",&number); int firstMax, secondMax, thirdMax; fir

我需要从n个数字中找出最大的三个元素,而不需要使用数组、列表结构,也不应该使用任何排序逻辑。有没有办法更有效地做这件事

#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;
    }
#包括
int main()
{
int n;
scanf(“%d”和“&n”);
整数;
scanf(“%d”和编号);
int firstMax、secondMax、thirdMax;
firstMax=secondMax=thirdMax=number;
对于(int i=1;i firstMax){
第三最大值=第二最大值;
secondMax=firstMax;
firstMax=数量;
}
否则如果(数字>秒最大值){
第三最大值=第二最大值;
secondMax=数量;
}
否则,如果(编号>第三最大值){
第三最大值=数量;
}
}
printf(“%d%d%d”,firstMax,secondMax,thirdMax);
返回0;
}

您可以从与
thirdMax
进行比较开始。如果这是错误的,则不需要考虑所有其他因素

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

您可以从与
thirdMax
进行比较开始。如果这是错误的,则不需要考虑所有其他因素

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

您对绩效的担忧是什么?您的算法运行n
O(n)
,这是解决此问题的最佳方法。如果您想进行一般性的代码检查,您应该改为查看。我投票将此问题作为主题外的问题来结束,因为这是一个帮助改进工作代码的请求。由于您的代码正在工作,并且您只是希望使其更好,您应该将其提交给代码检查。@GomathiNatarajan.:当您的代码得到字符输入时会发生什么?尝试检查
scanf
的返回值。这确实是一个代码检查问题,但您的方法似乎是合理的。您的性能问题是什么?您的算法运行n
O(n)
,这是解决此问题的最佳方法。如果您想进行一般性的代码检查,您应该改为查看。我投票将此问题作为主题外的问题来结束,因为这是一个帮助改进工作代码的请求。由于您的代码正在工作,并且您只是希望使其更好,您应该将其提交给代码检查。@GomathiNatarajan.:当您的代码得到字符输入时会发生什么?尝试检查
scanf
的返回值。这确实是一个代码审查问题,但您的方法似乎是合理的。