1020 月饼(25 分)

#include<iostream>
#include<algorithm>//sort
#include<vector>
using namespace std;
struct stu{
double a,b,c;
};
//return a>b 表示降序,return a<b表示升序
bool cmp(stu a1,stu b1){
return a1.c>b1.c;
}
int main()
{
int n,d;
cin>>n>>d;
double a[1000],b[1000];//a 库存量 b总售价
double c[1000],result=0;//c 平均价格
//
///*
//将库存 总售价 平均价格录入向量v1的方法1
stu tmp;
vector<stu> v1,v;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
for(int i=0;i<n;i++) c[i]=b[i]/a[i];
for(int i=0;i<n;i++){
tmp.a=a[i];
tmp.b=b[i];
tmp.c=c[i];
v1.push_back(tmp);
}
v=v1;
//*/
/*
//将库存 总售价 平均价格录入向量v2的方法2
vector<stu> v2(n),v(n); //(n)不能省略 否则是段错误
for(int i=0;i<n;i++) cin>>v2[i].a;
for(int i=0;i<n;i++) cin>>v2[i].b;
for(int i=0;i<n;i++) v2[i].c=v2[i].b/v2[i].a;
v=v2;
*/
//
sort(v.begin(),v.end(),cmp);
double sum=0;
int k=0;
//第一种判断方式
for(int i=0;sum<d&&i<n;i++){
result = v[i].b+result; ///result = b[i]+result; 之前的错误原因代码 需要在向量v中按照顺序提取b[i],而不是从初始顺序里面提取b[i]
sum +=v[i].a; //sum +=a[i];
k++;
}
if(sum>=d)
result = result -(sum-d)*v[k-1].c; //result = result -(sum-d)*c[k-1];
///
//第二种判断方式
/*
for(int i=0;i<n&&d!=0;i++)
{
if(d>=v[i].a)
{
result+=v[i].b;
d-=v[i].a;
}
else
{
result+=v[i].c*d;
break;
}
}
*/
///
printf("%.2f",result);
return 0;
}
本文介绍了如何使用C++解决一道编程题目,涉及月饼分配的算法实现和思路解析。
&spm=1001.2101.3001.5002&articleId=82180127&d=1&t=3&u=a387306c2d5e4cb6ad693b386b0baa11)
106

被折叠的 条评论
为什么被折叠?



