/*
La idea general es la siguiente:
Primero calcule el precio unitario y luego observe cuántos artículos tienen el precio unitario más alto.
Si la cantidad es menor que la capacidad, entonces: suma + = precio unitario * número de artículos; capacidad = capacidad - número de artículos
En caso contrario: suma + = precio unitario; * número de artículos; cálculo de salida; suma de producción;
Mientras todavía haya capacidad, cuente los artículos con el precio unitario más alto y continúe contando hasta que la capacidad esté llena.
Este cálculo es bastante fácil, pero la entrada es un poco problemática.
Espero que puedas echarle un vistazo detenidamente.
*/
#include
#include
entrada nula (int *num ,int n)
{
int i;
char ch;
fflush(stdin); //Borrar los datos de la caché
for(i=0;i { num[i]=0; mientras ( 1) //Solo puedes usar un bucle interno para recibir uno por uno { scanf("%c",&ch); if( ch= =' ' || ch=='\n') break; //Detiene el bucle interno cuando se encuentra un espacio o un retorno de carro num[i]=num[i]*1 (ch- '0'); // De lo contrario, agregue 10 al valor original y agregue el valor recibido. } } } void main() { int n;//Tipo de artículo int c;//Capacidad de la mochila int wi[10]; //Peso int vi[10]; //Valor double sum=0; //Recibir suma double sinp[10],tmp; //Precio unitario int i,j; scanf("%d %d",&n,&c); input(wi,n);// Es un poco problemático recibir aquí, porque los datos recibidos no es seguro, agregue. Están separados por espacios input(vi,n);//Así que espero que alguien tenga una mejor manera de compartirlo for(i=0;i { sinp[i]=(double)vi[i]/wi[i]; } for(i=0;i { for(j=i+ 1;j { if(sinp[j]>sinp[i]) { tmp=sinp[j]; sinp[j]=sinp[i]; sinp[i]=tmp; tmp=wi[j] ]; //Las cantidades también se intercambian, y se utilizarán junto con el precio unitario para calcular el total más adelante wi[j]=wi[i]; wi[ i]=tmp ; } } if(c>wi[i]) //La capacidad es mayor que el número de artículos p> { p> sum+=(double)sinp[i]*wi[i]; //Si el precio total (vi) anterior también se intercambia, esto se puede escribir como sum+=vi [i]; c-=wi[i]; } más { sum+=(double)sinp[i]* c; break; //La capacidad está llena, sal } } printf("%.1lf\n" ,suma); }