Es una pregunta codiciosa muy simple, y puedo responderla fácilmente una vez (porque se ignora la precisión de los datos, por lo que la primera vez es 0 puntos, jajaja)
No hay una operación redundante, solo abra una matriz de estructura, clasifique primero la que tiene el precio unitario más alto y luego recorra y juzgue.
A continuación se muestra el código AC:
#include<bits/stdc++.h> //万能头
using namespace std;
int main(void)
{
struct node //定义一个结构体数组
{
double sl;
double zj;
double dj;
};
struct node q[101];
double n,backpack,sum=0;
cin>>n>>backpack;
for(int i=0;i<n;i++){
cin>>q[i].sl>>q[i].zj;
q[i].dj=q[i].zj/q[i].sl;
}
for(int i=0;i<n;i++){ //冒泡排序
for(int j=i+1;j<n;j++){
if(q[j].dj>q[i].dj){
struct Q temp;
temp=q[i];
q[i]=q[j];
q[j]=temp;
}
}
}
for(int i=0;i<n;i++){
if(backpack-q[i].sl>-0.000001){sum+=q[i].zj;backpack-=q[i].sl;} //double型不能直接相等
else {sum+=(backpack*q[i].dj);break;}
}
printf("%.2f",sum);
return 0;
}
Ah ja ja ja ja, la versión mejorada está llegando.
Cuando usaba la clasificación de burbujas, siempre estaba descontento, así que me preguntaba si podría usar sort para ordenar la matriz de estructuras, y luego escribí una versión de clasificación usando sort No preguntes, solo busco la perfección. hombre.
#include<bits/stdc++.h>
using namespace std;
struct node
{
double sl;
double zj;
double dj;
}q[101];
bool comparison(node a,node b) //自定义sort的比较方法。
{
return a.dj>b.dj;
}
int main(void)
{
int n; 如果将n定义成double,在sort函数中将会报错。
double backpack,sum=0;
cin>>n>>backpack;
for(int i=0;i<n;i++){
cin>>q[i].sl>>q[i].zj;
q[i].dj=q[i].zj/q[i].sl;
}
sort(q,q+n,comparison); //好美好快好简洁
for(int i=0;i<n;i++){
if(backpack-q[i].sl>-0.000001){sum+=q[i].zj;backpack-=q[i].sl;}
else {sum+=(backpack*q[i].dj);break;}
}
printf("%.2f",sum);
return 0;
}
Haga una tarjeta todos los días, buenas noches a todos.