1 条题解

  • 0
    @ 2025-2-14 21:11:41

    C :

    #include<stdio.h>
    #include<string.h>
    typedef struct{
        double W;
        double F;
        double Val;
    }Food;
    Food food[1000];
    int main()
    {
        int M, N;
        int i,j;
        while(scanf("%d %d",&M,&N))
    {
            if(M == -1 && N == -1)
            {
                break;
            }
            memset(food,0,sizeof(food));
            for(i=0;i<N;i++)
            {
                scanf("%lf %lf",&food[i].W,&food[i].F);
                food[i].Val = food[i].W/food[i].F;
            }
            //sort(food,food+N,Cmp);
            for(i=0;i<N;i++)
            {
                for(j=i+1;j<N;j++)
                {
                   if(food[i].Val<food[j].Val)
                   {
                       Food temp;
                        temp.W=food[i].W;
                        temp.F=food[i].F;
                        temp.Val=food[i].Val;
                        food[i].W=food[j].W;
                        food[i].F=food[j].F;
                        food[i].Val=food[j].Val;
                        food[j].W=temp.W;
                        food[j].F=temp.F;
                        food[j].Val=temp.Val;
    
                   }
    
                }
    
            }
            double res = 0;
            for(i=0;i<N;i++)
            {
                if(M >= food[i].F)
                {
                    M -= food[i].F;
                    res += food[i].W;
                }
                else if(M == 0)
                {
                    break;
                }
                else
                {
                    double temp = M/food[i].F;
                    res += food[i].W*temp;
                    M = 0;
                }
            }
            printf("%.3lf\n",res);
        }
        return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef struct{
        double W;
        double F;
        double Val;
    }Food;
    
    Food food[1000];
    int Cmp(Food X, Food Y)
    {
        return X.Val > Y.Val;
    }
    
    int main()
    {
        int M, N;
        int i;
        while(scanf("%d %d",&M,&N))
        {
            if(M == -1 && N == -1)
            {
                break;
            }
            memset(food,0,sizeof(food));
            for(i=0;i<N;i++)
            {
                scanf("%lf %lf",&food[i].W,&food[i].F);
                food[i].Val = food[i].W/food[i].F;
            }
            sort(food,food+N,Cmp);
    //        for(i=0;i<N;i++)
    //        {
    //            printf("%lf %lf %lf\n",food[i].W,food[i].F,food[i].Val);
    //        }
            double res = 0;
            for(i=0;i<N;i++)
            {
                if(M >= food[i].F)
                {
                    M -= food[i].F;
                    res += food[i].W;
                }
                else if(M == 0)
                {
                    break;
                }
                else
                {
                    double temp = M/food[i].F;
                    res += food[i].W*temp;
                    M = 0;
                }
            }
            printf("%.3lf\n",res);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    698
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者