\(^o^)/~ 发表于 2015-11-23 13:28:26

这组数据求解为什么没有排序成功??导致结果错误,求解

#include<stdio.h>
#include<stdlib.h>
typedef struct number
{
        float g;
        float q;
        float s;
}SN;
void comp(SN *p, int N)
{
        int i, j;
        SN k;
        for(i = 0; i < N-1; i++)
        {
                for(j = i+1; j < N; j++)
                {
                        if((p+j)->s > (p+i)->s)
                        {
                                k.g = (p+i)->g;
                                (p+i)->g = (p+j)->g;
                                (p+j)->g = k.g;

                                k.q = (p+i)->q;
                                (p+i)->q = (p+j)->q;
                                (p+j)->q = k.q;
                        }
                }
        }
/*        for(i = 0; i < N; i++)
        {
                printf("%f %f\n", (p+i)->g, (p+i)->q);
        }*/
}
int main()
{
        float M, sum;
        int N, i;
        SN *p;
        while(scanf("%f %d", &M, &N)!=EOF)
        {
                if(M==-1||N==-1)
                        break;
                sum = 0;
                p = (SN *)malloc(sizeof(SN)*N);

                for(i = 0; i < N; i++)
                {
                        scanf("%f", &(p+i)->g);
                        scanf("%f", &(p+i)->q);
                        (p+i)->s = (p+i)->g/(p+i)->q;
                }
                comp(p, N);//没排序成 有些数据

                for(i = 0; i < N; i++)
                {
                        if(M >= (p+i)->q)
                        {
                                sum = sum + (p+i)->g;
                                M = M - (p+i)->q;
                        }
                        else
                        {
                                sum = sum + M/(p+i)->q*(p+i)->g;
                                break;
                        }
                }
                printf("%.3f\n", sum);
        }
        return 0;
}
数据:
20 3
25 18
24 15
15 10

ravenhu13 发表于 2015-11-23 13:47:22

本帖最后由 ravenhu13 于 2015-11-23 13:50 编辑

只针对COMP?

ravenhu13 发表于 2015-11-23 13:56:37

SN k;
k.s是数据的标号。
你的算法是根据标号来替换k.g和k.q,但是k.g和k.q和j.g还有j.q并没有进行逻辑上的排序比较哦,就只是单纯的替换?打印出来就没有排序效果啊。只是根据你的k.s进行排序而已,光看k.g和k.q看不出排序啊,但实际实际已经排序了。

\(^o^)/~ 发表于 2015-11-23 15:06:47

ravenhu13 发表于 2015-11-23 13:47
只针对COMP?

\(^o^)/~ 发表于 2015-11-23 15:07:50

ravenhu13 发表于 2015-11-23 13:56
SN k;
k.s是数据的标号。
你的算法是根据标号来替换k.g和k.q,但是k.g和k.q和j.g还有j.q并没有进行逻辑上 ...

我想 由大到小排列,主函数 下面要用

\(^o^)/~ 发表于 2015-11-23 15:10:26

ravenhu13 发表于 2015-11-23 13:56
SN k;
k.s是数据的标号。
你的算法是根据标号来替换k.g和k.q,但是k.g和k.q和j.g还有j.q并没有进行逻辑上 ...

我就想 根据 s的大小 把结构体的g和q排列,

\(^o^)/~ 发表于 2015-11-23 17:48:33

ravenhu13 发表于 2015-11-23 13:56
SN k;
k.s是数据的标号。
你的算法是根据标号来替换k.g和k.q,但是k.g和k.q和j.g还有j.q并没有进行逻辑上 ...

知道了, 谢啦
页: [1]
查看完整版本: 这组数据求解为什么没有排序成功??导致结果错误,求解