Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 在K(10)个数中求N(3)个最大数_C_Algorithm_Numbers_Compare - Fatal编程技术网

C 在K(10)个数中求N(3)个最大数

C 在K(10)个数中求N(3)个最大数,c,algorithm,numbers,compare,C,Algorithm,Numbers,Compare,我想从10个数字(scanf)中找出三个最大的数字(面积),我写了这段代码,但当我运行它时,只有最大的数字是正确的,第二和第三大数字是错误的。所以,我需要帮助。有什么建议吗?圣诞快乐 #include <stdio.h> #define N 3 int main() { int i,j; int area; int maxArea[N]; int empty = N; for(j=0;j<10;j

我想从10个数字(scanf)中找出三个最大的数字(面积),我写了这段代码,但当我运行它时,只有最大的数字是正确的,第二和第三大数字是错误的。所以,我需要帮助。有什么建议吗?圣诞快乐

#include <stdio.h>
#define N 3

int main()
{
        int i,j;
        int area; 
        int maxArea[N]; 
        int empty = N;

     for(j=0;j<10;j=j+1)
     {    
         printf("Input:");
          scanf("%d",&area);
          printf("\n");

         if(empty > 0)
         {
           maxArea[N-empty]=area;

           empty=empty-1;
         }
         else
         {
           for(i=0; i < N; i=i+1)
           {
             if(area>maxArea[i])
             {
               maxArea[i]=area;

               break;
             }
           }
         }
       }
       printf("Area1=%d\n",maxArea[0]);
       printf("Area2=%d\n",maxArea[1]);
       printf("Area3=%d\n",maxArea[2]);
#包括
#定义n3
int main()
{
int i,j;
内部区域;
int最大面积[N];
int empty=N;
对于(j=0;j 0)
{
maxArea[N-空]=面积;
空=空-1;
}
其他的
{
对于(i=0;i最大面积[i])
{
最大面积[i]=面积;
打破
}
}
}
}
printf(“Area1=%d\n”,maxArea[0]);
printf(“Area2=%d\n”,maxArea[1]);
printf(“区域3=%d\n”,maxArea[2]);

}首先,您应该将所有数组元素初始化为零

此外,由于只检查数组中小于新元素的第一个元素,因此代码无法正常工作

如果数组有6,3,2,新元素是7,那么7将从数组中弹出6,数组将变成7,3,2。相反,它应该是7,6,3

您应该弹出数组中最小的数字。


在一般情况下,
minheap
将是最佳选择。(对于k个最大元素)

首先,应将所有数组元素初始化为零

此外,由于只检查数组中小于新元素的第一个元素,因此代码无法正常工作

如果数组有6,3,2,新元素是7,那么7将从数组中弹出6,数组将变成7,3,2。相反,它应该是7,6,3

您应该弹出数组中最小的数字。


在一般情况下,
minheap
将是最佳选择。(对于k个最大元素)

首先,应将所有数组元素初始化为零

此外,由于只检查数组中小于新元素的第一个元素,因此代码无法正常工作

如果数组有6,3,2,新元素是7,那么7将从数组中弹出6,数组将变成7,3,2。相反,它应该是7,6,3

您应该弹出数组中最小的数字。


在一般情况下,
minheap
将是最佳选择。(对于k个最大元素)

首先,应将所有数组元素初始化为零

此外,由于只检查数组中小于新元素的第一个元素,因此代码无法正常工作

如果数组有6,3,2,新元素是7,那么7将从数组中弹出6,数组将变成7,3,2。相反,它应该是7,6,3

您应该弹出数组中最小的数字。


在一般情况下,
minheap
将是最佳选择。(对于k个最大元素)

我只想向您展示一种不同的方法,您必须自己决定什么更容易

首先,我用可能的最小整数初始化
maxArea
。这样,如果它还没有包含3个数字,我就不需要特殊处理。任何数字都将大于
MIN\u INT
,因此它将被自动替换

for(i=0; i < N; i++)
{
   maxArea[i]=MIN_INT;
}
(i=0;i { maxArea[i]=MIN_INT; } 在循环中,我用旧的最大值交换区域,并继续运行循环,因此旧值将被其他最大值重用

for(j=0;j<10;j=j+1)
{    
     printf("Input:");
     scanf("%d",&area);
     printf("\n");

     for(i=0; i < N; i++)
     {
         if(area>maxArea[i])
         {
           // swap both
           int temp=maxArea[i];
           maxArea[i]=area;
           area=temp;
         }
     }
 }
for(j=0;jmaxArea[i])
{
//交换两者
int temp=最大面积[i];
最大面积[i]=面积;
面积=温度;
}
}
}
请注意,这并不是非常优化,但最好阅读正在发生的事情
maxArea[0]
将始终是最大的,而
maxArea[1]
将是下一个,依此类推

例如,如果数组为[6,3,2],新区域为5

  • 在第一个循环中不会发生任何事情,因为5小于6
  • 在第二个循环(i=1)中,数组将变为[6,5,2],面积为3
  • 在第三个循环中,数组将变为[6,5,3],面积将为2(但不再使用该2)

我只想向你展示一种不同的方法,你必须自己决定什么更容易

首先,我用可能的最小整数初始化
maxArea
。这样,如果它还没有包含3个数字,我就不需要特殊处理。任何数字都将大于
MIN\u INT
,因此它将被自动替换

for(i=0; i < N; i++)
{
   maxArea[i]=MIN_INT;
}
(i=0;i { maxArea[i]=MIN_INT; } 在循环中,我用旧的最大值交换区域,并继续运行循环,因此旧值将被其他最大值重用

for(j=0;j<10;j=j+1)
{    
     printf("Input:");
     scanf("%d",&area);
     printf("\n");

     for(i=0; i < N; i++)
     {
         if(area>maxArea[i])
         {
           // swap both
           int temp=maxArea[i];
           maxArea[i]=area;
           area=temp;
         }
     }
 }
for(j=0;jmaxArea[i])
{
//交换两者
int temp=最大面积[i];
最大面积[i]=面积;
面积=温度;
}
}
}
请注意,这并不是非常优化,但最好阅读正在发生的事情
maxArea[0]
将始终是最大的,而
maxArea[1]
将是下一个,依此类推

例如,如果数组为[6,3,2],新区域为5

  • 在第一个循环中不会发生任何事情,因为5小于6
  • 在第二个循环(i=1)中,数组将变为[6,5,2],面积为3
  • 在第三个循环中,数组将变为[6,5,3],面积将为2(但不再使用该2)

我只想向你展示一种不同的方法,你必须自己决定什么更容易

首先,我用可能的最小整数初始化
maxArea
。这样,如果它还没有包含3个数字,我就不需要特殊处理。任何数字都会比
MIN\u INT
大,所以它会