您的位置:首页 > 其它

PAT乙级(Basic Level)真题 1010.月饼

2016-11-27 21:34 381 查看
题目地址

点击打开题目

解题思路

每一种月饼都有自己的库存num、总价sumprice,用结构体数组来表示这一系列月饼比开多个数组可读性高。

涉及单价的排序,故在结构体中加入单价price,便于对比排序。

用vector来存放结构体数组p。

按单价从高到低的顺序取库存,直到填满市场需求量。

注:在循环取库存过程中,由于涉及到浮点运算,故使用p[j].num * p[j].price来表示p[j].sumprice会出错。

AC代码如下:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;

struct mooncake{
int num;
int sumprice;
double price;
};

/* sort比较函数,单价高的排在前 */
bool cmp( mooncake a,mooncake b ){
return a.price>b.price;
}

int main()
{
int n,d;
scanf("%d%d",&n,&d);
vector<mooncake> p(n);//定义容器数组p(此处用指针会出错)
for( int i=0;i<n;++i ){
scanf("%d",&p[i].num);
}
for( int i=0;i<n;++i ){
scanf("%d",&p[i].sumprice);
p[i].price = double(p[i].sumprice) / double(p[i].num);
}

sort( p.begin(),p.end(),cmp );

double sum=0;
for( int j=0;j<n;++j ){
if( p[j].num>=d ){//库存量够取出需要的库存,结束循环
sum += d * p[j].price;
break;
}
else{//库存量不够时取出全部库存,然后到下一个库中取货
d -= p[j].num;
sum += p[j].sumprice;/*!!!bug所在!!!*/
}
}

/* C++保留2位小数 */
cout<<setiosflags(ios::fixed)<<setprecision(2)<<sum;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: