标题:我想在一个数组内按顺序求出最大值、次大值、第三大的值,这样写有什么问题 ...
只看楼主
青少年世代
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-8
结帖率:75%
已结贴  问题点数:20 回复次数:6 
我想在一个数组内按顺序求出最大值、次大值、第三大的值,这样写有什么问题么?
int max3_count(float *a,float *b)//a为采样数组,b为求出最大值,次大值,以及第三大值的数组
{
    float *x;
    int i,j;
    *(x+0)=*(a+0);
    for(i=1;i<1024;i++)
    {
        if((*x)>*(a+i))
        {
            *(b+0)=*x;
        }
        else
        {
            *(b+0)=*(a+i);
        }
        if(*(b+0)>*(a+i+1)&&*(a+i+1)>*(a+i+2))
        {
            *(b+1)=*(a+i+1);
        }
        else
        {
            *(b+1)=*(a+i+2);
        }
        if(*(b+1)>*(a+i+2)&&*(a+i+2)>*(a+i+3))
        {
            *(b+2)=*(a+i+2);
        }
        else
        {
            *(b+2)=*(a+i+3);
        }
    }
}
搜索更多相关主题的帖子: 一个数 顺序 最大值 float 数组 
2017-12-08 22:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
#include <stdio.h>

void max3_count(float *a, int n, float *b)
{
    int i;
    b[0] = b[1] = b[2] = a[0];
    for(i=1; i<n; ++i)
    {
        if (a[i] > b[0])
        {
            b[2] = b[1];
            b[1] = b[0];
            b[0] = a[i];
        }
        else if (a[i] > b[1])
        {
            b[2] = b[1];
            b[1] = a[i];
        }
        else if (a[i] > b[2])
            b[2] = a[i];
    }
}

main()
{
    float a[6]={1,3,5,2,4,6}, b[3];
    max3_count(a, 6, b);
    printf("%f %f %f\n", b[0],b[1],b[2]);
    return 0;
}
2017-12-09 05:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
b[0] = b[1] = b[2] = a[0];
这句有问题
2017-12-09 11:43
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
得分:0 
先从大到小排序
然后第一个最大 第二个次大 第三个就是第三个大了.
2017-12-09 14:29
青少年世代
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-8
得分:0 
回复 2楼 吹水佬
我想直接显示对应所在点的位置,请问这样写改你的可以么?
void max3_count(float *a, int n, float *b,int *c)
{
    int j=0,i;
    b[0] = b[1] = b[2] = a[0];
    *c=0;
    for(i=0; i<n; ++i)
    {
        j++;
        if (a[i] > b[0])
        {
            b[2] = b[1];
            b[1] = b[0];
            b[0] = a[i];
            c[0]=j;
        }
        else if (a[i] > b[1])
        {
            b[2] = b[1];
            b[1] = a[i];
            c[1]=j;
        }
        else if (a[i] > b[2])
        {
            b[2] = a[i];
            c[2]=j;
        }
   
    }
}
main()
{
    float a[6]={1,3,5,2,4,6}, b[3];
    int c[3];
    max3_count(a, 6, b,c);
    printf("%f %f %f\n", b[0],b[1],b[2]);
     printf("%d %d %d\n", c[0],c[1],c[2]);
    return 0;
}
2017-12-09 14:46
青少年世代
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-8
得分:0 
回复 4楼 新人学习
如果在把他位置也显示出来呢?按照二楼老哥的写法,我就加了一句简单的,好像不太对- -
#include <stdio.h>

void max3_count(float *a, int n, float *b,int *c)
{
    int j=0,i;
    b[0] = b[1] = b[2] = a[0];
    *c=0;
    for(i=0; i<n; ++i)
    {
        j++;
        if (a[i] > b[0])
        {
            b[2] = b[1];
            b[1] = b[0];
            b[0] = a[i];
            c[0]=j;
        }
        else if (a[i] > b[1])
        {
            b[2] = b[1];
            b[1] = a[i];
            c[1]=j;
        }
        else if (a[i] > b[2])
        {
            b[2] = a[i];
            c[2]=j;
        }
   
    }
}
main()
{
    float a[6]={1,3,5,2,4,6}, b[3];
    int c[3];
    max3_count(a, 6, b,c);
    printf("%f %f %f\n", b[0],b[1],b[2]);
     printf("%d %d %d\n", c[0],c[1],c[2]);
    return 0;
}
2017-12-09 14:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 5楼 青少年世代
b[0] = b[1] = b[2] = a[0];
这句不成,如 6 5 4 3 2 1,结果就是6 6 6了
排序也可以,不用全部排序,降序只排出前3个数就好了。
2017-12-09 16:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483234-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.120955 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved