zoukankan      html  css  js  c++  java
  • 1020. 月饼

    题目截图:

    思路:

      贪心算法。按照单价从高往低遍历即可。详解请看另一篇博客

    代码:

     1 /*
     2     1020. 月饼
     3 */
     4 
     5 #include <stdio.h>
     6 #include <string.h>
     7 #include <math.h>
     8 #include <stdlib.h>
     9 #include <time.h>
    10 
    11 typedef struct {    // 月饼 
    12     double store;    // 库存 
    13     double sell;    // 总售价 
    14     double price;    // 单价 
    15 } mooncake;
    16 mooncake cake[1010];
    17 int cmp(const void* a, const void* b) {    // 按单价从大到小排列 
    18     mooncake* c = (mooncake*)a;
    19     mooncake* d = (mooncake*)b;
    20     return d->price > c->price ? 1 : -1;
    21 }
    22 
    23 int main() {
    24     int n, d, i;    // n 月饼总类数,d 市场最大需求量
    25     double sum = 0.0f;    // sum 最大收益 
    26     scanf("%d %d", &n, &d);
    27     for(i=0; i<n; ++i) {    // 输入库存量 
    28         scanf("%lf", &cake[i].store);
    29     } 
    30     for(i=0; i<n; ++i) {    // 输入总售价 
    31         scanf("%lf", &cake[i].sell);
    32     } 
    33     for(i=0; i<n; ++i) {    // 计算单价 
    34         cake[i].price = cake[i].sell/cake[i].store;
    35     } 
    36     qsort(cake, n, sizeof(mooncake), cmp);    // 按照单价排序
    37     for(i=0; i<n; ++i) {
    38         if(cake[i].store <= d) {    // 需求量高于库存 
    39             sum += cake[i].sell; 
    40             d -= cake[i].store;        // 全部卖出 
    41         } else if(cake[i].store > d) {    // 需求量低于库存 
    42             sum += cake[i].sell/(cake[i].store/d);    // 部分卖出 
    43             break;
    44         }
    45     } 
    46     printf("%.2f
    ", sum);        // 输出2位小数 
    47     
    48     return 0;
    49 }
  • 相关阅读:
    leetcode每日刷题计划-简单篇day10
    leetcode每日刷题计划-简单篇day9
    leetcode每日刷题计划-简单篇day8
    leetcode每日刷题计划-简单篇day7
    leetcode每日刷题计划-简单篇day6
    leetcode每日刷题计划-简单篇day5
    leetcode每日刷题计划-简单篇day4
    leetcode每日刷题计划-简单篇day3
    设计模式解决 if-else
    线程池
  • 原文地址:https://www.cnblogs.com/coderJiebao/p/PAT1020.html
Copyright © 2011-2022 走看看