PAT A1070 月饼题
这道题个人觉得不严谨……
如果所有月饼的库存量都满足不了需求量该怎么输出没有提……(如果我眼花了请指正)
测试点3我的出现了段错误,找半天发现是while循环中i的限制,原本是这样写的:
```cpp
while (true)
{
gram = gram + cookie[i].kucun;
money = money + cookie[i].all;
if (gram >= d) {
money = money - (gram - d) * cookie[i].price;
break;
}
i++;
}
后来改成:
```cpp
while (true)
{
gram = gram + cookie[i].kucun;
money = money + cookie[i].all;
if (gram >= d) {
money = money - (gram - d) * cookie[i].price;
break;
}
i++;
if(i == n) break;加了这句
}
限制了i以后测试点3的段错误就过了……
下面是完整的代码:
#include<iostream>
#include <string>
#include <cstdio>
#include<cmath>
#include<algorithm>//min()、sort()
#include<iomanip>
#include<map>
using namespace std;
struct moon {
double kucun;
double all;
double price;
};
moon cookie[1010];
bool cmp(moon a, moon b) {
return a.price > b.price;
}
int main() {
int n;
double d;
cin >> n;
cin >> d;
for (int i = 0; i < n; i++)
{
cin >> cookie[i].kucun;
}
for (int i = 0; i < n; i++)
{
cin >> cookie[i].all;
cookie[i].price = cookie[i].all / cookie[i].kucun;
}
sort(cookie, cookie + n, cmp);
double gram = 0;
double money = 0;
int i = 0;
while (true)
{
gram = gram + cookie[i].kucun;
money = money + cookie[i].all;
if (gram >= d) {
money = money - (gram - d) * cookie[i].price;
break;
}
i++;
if(i == n) break;
}
cout << fixed<<setprecision(2) << money;
}