1020. 月饼
2018-02-27 11:38
295 查看
题目截图:
思路:
贪心算法。按照单价从高往低遍历即可。详解请看另一篇博客。
代码:
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\n", sum); // 输出2位小数 47 48 return 0; 49 }
相关文章推荐
- PAT-B 1020. 月饼
- PAT(B) - 1020. 月饼 (25)
- 夕拾算法初级篇:5)1020. 月饼(贪心)
- PAT乙级 1020. 月饼 (25)
- pat 乙级 1020 吃月饼(25)
- PAT 1020. 月饼
- 【C++】浙大PAT (Basic Level)1020. 月饼 (25)
- 1020. 月饼 (25)
- PAT (Basic Level)1020. 月饼
- 1020. 月饼 (25)
- PAT(B)1020. 月饼 (25)
- 1020 月饼
- 1020. 月饼 (25)
- 1020. 月饼
- 1020. 月饼 (25)
- 1020. 月饼 (25)
- 1020. 月饼 (25) PAT乙级真题
- 1020. 月饼
- 浙大PAT 1020. 月饼 (解题思路)
- PAT-B 1020. 月饼(同PAT 1070. Mooncake)