C 如何仅使用库从所有数组中获取三个最高值

C 如何仅使用库从所有数组中获取三个最高值,c,C,嘿,伙计们,我设法找到了整个数组表中最高的三个。我的方法正确吗 int Man[] = { 18080,18961,18985,18761,17821,19021,18452,20000 }; int Infra[] = { 4922,4904,4993,5076,4970,4900,4718,4757 }; int Ser[] = { 13898,14424,14290,14362,12623,13139,13775,15081 }; int Trans[] = { 7382,7323,730

嘿,伙计们,我设法找到了整个数组表中最高的三个。我的方法正确吗

int Man[] = { 18080,18961,18985,18761,17821,19021,18452,20000 };
int Infra[] = { 4922,4904,4993,5076,4970,4900,4718,4757 };
int Ser[] = { 13898,14424,14290,14362,12623,13139,13775,15081 };
int Trans[] = { 7382,7323,7304,7675,7147,7335,6972,7740 };
int Others[] = { 1398,1438,1414,1435,1361,1420,1450,1476 };

void main(void)
{
int first = 0;
int second = 0;
int third = 0;
int i, k ;
//Find highest
for (i = 0; i<5; i++)
{
    if (Q1_2015[i] > first)
        first = Q1_2015[i];
    if (Q2_2015[i] > first)
        first = Q2_2015[i];
    if (Q3_2015[i] > first)
        first = Q3_2015[i];
    if (Q4_2015[i] > first)
        first = Q4_2015[i];
    if (Q1_2016[i] > first)
        first = Q1_2016[i];
    if (Q2_2016[i] > first)
        first = Q2_2016[i];
    if (Q3_2016[i] > first)
        first = Q3_2016[i];
    if (Q4_2016[i] > first)
        first = Q4_2016[i];
}

//Find Second highest
for (i = 0; i<5; i++)
{
    if (Q1_2015[i] < first && Q1_2015[i] > second)
        second = Q1_2015[i];
    if (Q2_2015[i] < first && Q2_2015[i] > second)
        second = Q2_2015[i];
    if (Q3_2015[i] < first && Q3_2015[i] > second)
        second = Q3_2015[i];
    if (Q4_2015[i] < first && Q4_2015[i] > second)
        second = Q4_2015[i];
    if (Q1_2016[i] < first && Q1_2016[i] > second)
        second = Q1_2016[i];
    if (Q2_2016[i] < first && Q2_2016[i] > second)
        second = Q2_2016[i];
    if (Q3_2016[i] < first && Q3_2016[i] > second)
        second = Q3_2016[i];
    if (Q4_2016[i] < first && Q4_2016[i] > second)
        second = Q4_2016[i];
}

//Find Third highest
for (i = 0; i<5; i++)
{
    if (Q1_2015[i] < first && Q1_2015[i] < second && Q1_2015[i]>third)
        third = Q1_2015[i];
    if (Q2_2015[i] < first && Q2_2015[i] < second && Q2_2015[i]>third)
        third = Q2_2015[i];
    if (Q3_2015[i] < first && Q3_2015[i] < second && Q3_2015[i]>third)
        third = Q3_2015[i];
    if (Q4_2015[i] < first && Q4_2015[i] < second && Q4_2015[i]>third)
        third = Q4_2015[i];
    if (Q1_2016[i] < first && Q1_2016[i] < second && Q1_2016[i]>third)
        third = Q1_2016[i];
    if (Q2_2016[i] < first && Q2_2016[i] < second && Q2_2016[i]>third)
        third = Q2_2016[i];
    if (Q3_2016[i] < first && Q3_2016[i] < second && Q3_2016[i]>third)
        third = Q3_2016[i];
    if (Q4_2016[i] < first && Q4_2016[i] < second && Q4_2016[i]>third)
        third = Q4_2016[i];

}

我把我的数据从一行改为一列,这样我就更容易执行这个任务的编码了,顺便问一下,网站上说我需要更多的文字来编辑这篇文章,因为我有太多的编码

所有40个中的3个最高值

这应该不会太难

创建3个int变量来保存所需的值,并将它们设置为0,例如a、b和c 循环检查所有5个数组,检查当前值是否大于a,以及是否为替换a的值,完成后a=最大值。
仅在这一次使用b再次遍历所有5个数组,并忽略a或任何大于或等于a的值 重复该步骤,c忽略任何大于或等于b的值
在这里要求人们做作业是不受欢迎的,你会被否决,但如果你想尝试一下,把你的代码放上去,我会找你的。

我们不是你的程序员,表现出一些努力。stdio.h中没有任何东西可以帮你做到这一点。您可以对每个数组进行排序,然后获得3个最高值就很简单了。有一个标准的排序算法,但是你运气不好,因为它在stdlib.h中,而不是在stdio.h中。还有其他方法。你会如何用铅笔和一张纸手工完成?对不起,我的意思是,有没有一种方法可以在不使用2D数组的情况下获得所有数组中最高的3个数据。只需要一些clarification@PicaLow是的,有一种方法,在一个临时数组中排列所有数组,然后应用我在前面的注释中所建议的内容。按照我在前面的评论中所说的,并考虑我第一次评论中的最后一个句子。忘记2D数组的概念吧,它是无用的。考虑你的问题,并展示你期望的结果。它是每个数组中的3个最高值,还是所有数组中的3个最高值加在一起?天哪,谢谢。这澄清了我对给定问题的一些疑问。你是对的,虽然我是基于上面的数字,但可能是OP在每个数组中寻找3个最高值,因为3个最高值都在int-Man[]ArrayLop再次遍历所有5个数组,仅此一次使用b并忽略a或任何大于或等于a的值。如何忽略if语句中的a?如果a是b,我就这么做了。这是正确的吗?这是另一个条件,所以解释它的最简单方法是if,如果每个数组中有8个元素,而不是5个元素,那么代码将无法工作,并且数组的名称与循环中使用的名称不同。