Un convoy de vehículos está alineado en una calle de un solo sentido y de un solo carril frente a un puente vehicular, de las mismas características que la calle, y que se encuentra sobre un río. Note que cómo la calle sólo tiene un carril, ningún vehículo puede rebasar a otro. El puente puede soportar un peso máximo w. Para controlar el tráfico en el puente hay operadores en ambos lados. El convoy de autos es dividido en grupos, de tal manera que todos los vehículos del grupo pueden atravesar el puente al mismo tiempo. Cuando un grupo alcanza el otro lado del puente, el operador de ese lado usa un teléfono para confirmar al otro operador que el siguiente grupo puede pasar. El peso de cada vehículo es conocido. La suma de los pesos de los vehículos en cada grupo no puede exceder el peso máximo que el puente puede soportar. Cada vehículo tiene una velocidad máxima con la que puede atravesar el puente. El tiempo que le toma a un grupo de vehículos atravesar el puente es calculado como el tiempo que tarda el vehículo más lento del grupo. El problema consiste en encontrar la mínima cantidad de tiempo en la cual el convoy entero puede atravesar el puente.
Entrada
Este programa debe recibir varias entradas. Primero, tres números enteros positivos separados por espacios: el primero de los números representa el máximo peso (en toneladas) que el puente puede soportar; el segundo representa la longitud del puente (en km); y el tercero es el número de vehículos n en el convoy. A continuación el programa debe preguntar n veces por dos números enteros positivos w y s, que serán ingresados al mismo tiempo separados pos un "-", donde w es el preso del vehículo (en toneladas) y s es la velocidad máxima (en km/h) con la que el vehículo puede atravesar el puente.
Salida
La salida del programa debe ser un simple número real que especifique el tiempo mínimo (en minutos) que le toma al convoy atravesar el puente.
HE TRATADO DE ARMAR LOS GRUPOS PERO NO ME SALE
#include<stdio.h>
#include<stdlib.h>
float opciones(float temp [],int j,int L, int i){
int q,k;
float cambio,t;
for(q=j;q<i-1;q++)
{
for(k=j+1;k<i;k++)
{
if(temp[q]>temp[k])
{cambio=temp[q];
temp[q]=temp[k];
temp[k]=cambio;
}
}
}
t=60*(L/temp[j]);
return t;
}
float vel(float temp[],int j,int L,int i,int z){
float t;
if(z==1){
j=0;
t=opciones(temp,j, L, i);
}else{
t=opciones(temp,j,L,i);
}
return t;
}
int main(){
int W,L,n,j=0,i=0,q,k,z=0;
float peso=0,temporal,t,tiempo=0;
printf("Dame el peso maximo del puente W:\n");
scanf("%d",&W);
printf("\nDame la longitud del puente L:\n");
scanf("%d",&L);
printf("\nDame el numero de carros del convoy:\n");
scanf("%d",&n);
printf("\nDame el peso w y velocidad de cada carro separados por un guion:\n");
float w[n],v[n],temp[n];
for(i=0;i<n;i++){
puts("--------------------------");
printf("\nAuto numero %d:\n",i+1);
scanf("%f-%f",&w,&v);}
printf("\nchingaaa%d,\n",i);
i=0;
while(j<=n){
peso=peso+w[j];
printf("\npeso%f:\n",peso);
if(peso<=W){
temp[j]=v[j];
printf("\n temporal: %f,\n",temp[j]);
j++;
printf("\njdentro%d,\n",j);
i++;
printf("\ni dentro%d,\n",i);
puts("--------------------------------------");
}else{
z++;
printf("\nzelse:%d,\n",z);
t=vel(temp,j,L,i,z);
if(j==n-1 && n%n==0){
i=1; z++; temp[j]=v[j];
t=vel(temp,j,L,i,z);
}
peso=0;
i=0;
tiempo=tiempo + t;
}
}
printf("\nTIEMPO ES:%f\n",tiempo);
return 0;
}
Ejemplo de entrada
100 5 10
40 25
50 20
50 20
70 10
12 50
9 70
49 30
38 25
27 50
19 70
Ejemplo de salida
78.0
ayudenme porfavor!!
Entrada
Este programa debe recibir varias entradas. Primero, tres números enteros positivos separados por espacios: el primero de los números representa el máximo peso (en toneladas) que el puente puede soportar; el segundo representa la longitud del puente (en km); y el tercero es el número de vehículos n en el convoy. A continuación el programa debe preguntar n veces por dos números enteros positivos w y s, que serán ingresados al mismo tiempo separados pos un "-", donde w es el preso del vehículo (en toneladas) y s es la velocidad máxima (en km/h) con la que el vehículo puede atravesar el puente.
Salida
La salida del programa debe ser un simple número real que especifique el tiempo mínimo (en minutos) que le toma al convoy atravesar el puente.
HE TRATADO DE ARMAR LOS GRUPOS PERO NO ME SALE
#include<stdio.h>
#include<stdlib.h>
float opciones(float temp [],int j,int L, int i){
int q,k;
float cambio,t;
for(q=j;q<i-1;q++)
{
for(k=j+1;k<i;k++)
{
if(temp[q]>temp[k])
{cambio=temp[q];
temp[q]=temp[k];
temp[k]=cambio;
}
}
}
t=60*(L/temp[j]);
return t;
}
float vel(float temp[],int j,int L,int i,int z){
float t;
if(z==1){
j=0;
t=opciones(temp,j, L, i);
}else{
t=opciones(temp,j,L,i);
}
return t;
}
int main(){
int W,L,n,j=0,i=0,q,k,z=0;
float peso=0,temporal,t,tiempo=0;
printf("Dame el peso maximo del puente W:\n");
scanf("%d",&W);
printf("\nDame la longitud del puente L:\n");
scanf("%d",&L);
printf("\nDame el numero de carros del convoy:\n");
scanf("%d",&n);
printf("\nDame el peso w y velocidad de cada carro separados por un guion:\n");
float w[n],v[n],temp[n];
for(i=0;i<n;i++){
puts("--------------------------");
printf("\nAuto numero %d:\n",i+1);
scanf("%f-%f",&w,&v);}
printf("\nchingaaa%d,\n",i);
i=0;
while(j<=n){
peso=peso+w[j];
printf("\npeso%f:\n",peso);
if(peso<=W){
temp[j]=v[j];
printf("\n temporal: %f,\n",temp[j]);
j++;
printf("\njdentro%d,\n",j);
i++;
printf("\ni dentro%d,\n",i);
puts("--------------------------------------");
}else{
z++;
printf("\nzelse:%d,\n",z);
t=vel(temp,j,L,i,z);
if(j==n-1 && n%n==0){
i=1; z++; temp[j]=v[j];
t=vel(temp,j,L,i,z);
}
peso=0;
i=0;
tiempo=tiempo + t;
}
}
printf("\nTIEMPO ES:%f\n",tiempo);
return 0;
}
Ejemplo de entrada
100 5 10
40 25
50 20
50 20
70 10
12 50
9 70
49 30
38 25
27 50
19 70
Ejemplo de salida
78.0
ayudenme porfavor!!