鱼C论坛

 找回密码
 立即注册
查看: 1267|回复: 6

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

[复制链接]
发表于 2015-11-23 13:28:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-23 13:47:22 | 显示全部楼层
本帖最后由 ravenhu13 于 2015-11-23 13:50 编辑

只针对COMP?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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看不出排序啊,但实际实际已经排序了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 15:06:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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并没有进行逻辑上 ...

我想 由大到小排列  ,主函数 下面要用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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排列,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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并没有进行逻辑上 ...

知道了, 谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 13:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表