¿Cómo escribir este programa Problema de mochila? Utilice lenguaje C o C++.

/*

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

{

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);

}