zoukankan      html  css  js  c++  java
  • PTA --- L2-003 月饼

    这道题挺简单的,测试点2没过的话,注意题目中是两个正整数,而其余是正数

    【没注意到,,,踩坑了,,,】

    题目地址:

    https://pintia.cn/problem-sets/994805046380707840/problems/994805071789801472

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

    注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。

    输入格式:

    每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

    输出格式:

    对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。

    输入样例:

    3 20
    18 15 10
    75 72 45
    

    输出样例:

    94.50

    代码

    #include<stdio.h>
    typedef struct {
        float num;
        double kk;
    }XX[1005];
    
    float a[1005];
    int main(){
        
        XX ll;
        int n,all;
        scanf("%d %d",&n,&all);
        for(int i = 0; i< n;i++){
            float x;
            scanf("%f",&x);
            a[i] = x;
        }
        for(int i = 0; i < n;i++){
            float x;
            scanf("%f",&x);
            double p = x * 1.0;
            p = p/a[i];
            ll[i].kk = p;
            ll[i].num = a[i];
        }
        for(int i = 0;i <n-1;i++){
            for(int j = i+1;j < n;j++){
                if(ll[j].kk > ll[i].kk){
                    float t1;
                    double t2;
                    t2 = ll[j].kk;
                    ll[j].kk = ll[i].kk;
                    ll[i].kk = t2;
    
                    t1 = ll[j].num;
                    ll[j].num =ll[i].num;
                    ll[i].num = t1;
    
                }
            }
        }
        double sale = 0.0;
        for(int i = 0;i < n && all >= 0;i++){
            if(ll[i].num < all){
                all -= ll[i].num;
                sale += ll[i].num * ll[i].kk;
            }else if(ll[i].num > all){
                sale += ll[i].kk * all;
                all = 0;
            }else{
                sale += ll[i].kk * all;
                all = 0;
            }
        }
        printf("%.2lf",sale);
    
        //print
    //    for(int i = 0; i < n;i++)
    //        printf("%d %f
    ",ll[i].num,ll[i].kk);
    
        return 0;
    }
  • 相关阅读:
    考试 题目
    引用数据类型 Scanner和 Random
    数组
    数据字典 事物 序列 索引视图
    小程序下拉刷新
    使用e.target.dataset的问题
    动态统计当前输入内容的字节、字符数
    小程序根据input输入,动态设置按钮的样式
    小程序刨坑(一)
    charles 踩坑记录
  • 原文地址:https://www.cnblogs.com/expedition/p/11897280.html
Copyright © 2011-2022 走看看