Descripción
In a long street the traffic of express taxies is
organized in the following way: There is a taxi stop every one
kilometer. An express taxi drives along the street from each stop 1, 2,
3, ... or 10 kilometers without a stop.
For each of the ten distances a separate price is fixed and marked in
the table, e.g.
1 12
2 21
3 31
4 40
5 49
6 58
7 69
8 79
9 90
10 101
A passenger wants to travel n (1 <= n <= 100) kilometers. Can you
write a program to helping on that.
Which driving distances does the passenger have to choose so that the
journey would be the cheapest, and what is the total price of the
journey.
Especificación de entrada
The input has two lines. The first line contains ten
space separated integer numbers which are prices for driving 1, 2, 3,
... , 10 kilometers.
The last line contains the number of kilometers (n) which the passenger
has to travel.
Especificación de salida
Each line except the last one should contain two
numbers which are the length of the route and the price of the ticket.
The total price of the journey should be written in the last line of the
output. If several solutions are possible, choose one of them where
tickets (in ascending ordered by the distance) are minimum.
Ejemplo de entrada
12 21 31 40 49 58 69 79 90 101 15
Ejemplo de salida
3 31 6 58 6 58 147
hola, el codigo no es aseptado, una idea de porque esta mal.
ResponderEliminar#include
#include
#include
int main(){
int pre[2][10],z,n,j,m,i,k,b;
int dis[100],are[2][17];
int s,sum;
int n1,n2,n3,n4,n5,n6,n7,n8,n9,n10;
pre[0][0]=2;
pre[0][1]=1;
pre[0][2]=1;
pre[0][3]=0;
pre[0][4]=-1;
pre[0][5]=-2;
pre[0][6]=-1;
pre[0][7]=-1;
pre[0][8]=0;
pre[0][9]=1;
scanf("%d %d %d %d %d %d %d %d %d %d",&n1,&n2,&n3,&n4,&n5,&n6,&n7,&n8,&n9,&n10);
pre[1][0]=n1;
pre[1][1]=n2;
pre[1][2]=n3;
pre[1][3]=n4;
pre[1][4]=n5;
pre[1][5]=n6;
pre[1][6]=n7;
pre[1][7]=n8;
pre[1][8]=n9;
pre[1][9]=n10;
for(i=0;i<10;i++){
pre[1][i]= pre[1][i]+pre[0][i];
}
scanf("%d",&n);
m=n;
if(n%6==0){
s=n/6;
for(i=0;i7){
j=0;
while(m>6){
m=m-6;
dis[j++]=m;
k=j;
}
}
b=n-k*6;
dis[k+1]=b;
i=0;
j=0;
for(i=0;i<k;i++){
are[0][i]=6;
}
are[1][5]=pre[1][5];
for(i=0;i<k;i++){
printf("\n%d %d", are[0][i],are[1][5]);
}
printf("\n%d %d", b ,pre[1][b-1]);
sum=(k*pre[1][5]+pre[1][b-1]);
printf("\n%d",sum);
}
No me queda muy claro lo que haces, puedes agregar comentarios a tu codigo para ver que haces en cada paso?
ResponderEliminarobservaciones:
que asignas a pre[0][i]?
En realidad no necesitas los n(i)'s, puedes leer directamente como pre[1][i].
En el segundo for no especificas donde termina o como aumenta.
Les dejo mi codigo, pero cuando lo corro deja de funcionar. Supongo que hay un error de escritura que no he visto.
ResponderEliminar#include
long a[101][56],i,j,k,p,o,m,n;
int main(){
for(i=1;i<11;i++)
scanf("%ld",a[i][0]);//a[i][0]=cuanto cuesta viajar un km
scanf("%ld",&n);
if(a[1][0]<=a[2][0]/2&&a[1][0]<=a[3][0]/3&&a[1][0]<=a[4][0]/4&&a[1][0]<=a[5][0]/5&&a[1][0]<=a[6][0]/6&&a[1][0]<=a[7][0]/7&&a[1][0]<=a[8][0]/8&&a[1][0]<=a[9][0]/9){
//si viajar por kilometro es lo mas eficiente ya acabe
for(i=1;ii;k--)
a[n][k]=a[n][k-1];
a[n][i]=o;
continue;
}
}
}
for(i=1;i<a[n][55]+1;i++){
printf("%ld %ld\n",a[n][i],a[(a[n][i])][0]);
}
printf("%ld",a[n][54]);
}
}
Creo que sus códigos no se copiaron bien en los comentarios... En algunas partes donde iba un < o un > el código no se copió. Creo que eso pasó porque esos caracteres en HTML son palabras reservadas, así que deben escribirse con sus correspondientes secuencias de escape. Pueden ver cómo hacerlo en el siguiente link.
ResponderEliminarhttp://ininweb.uprm.edu/william/w_h/HTMLesp.htm#ES
En caso de que no funcione, pueden enviarme sus códigos por correo para que los revise.
MI codigo ya funciona con todos los casos que se me han ocurrido, pero no me lo aceptan en la pagina del caribbean online judge:
ResponderEliminar#include stdio.h
long a[101][56],i,j,k,p,o,m,n;
int main(){
for(i=1;i<11;i++)
scanf("%ld",&a[i][0]);//a[i][0]=cuanto cuesta viajar un km
scanf("%ld",&n);
if(a[1][0]<=a[2][0]/2&&a[1][0]<=a[3][0]/3&&a[1][0]<=a[4][0]/4&&a[1][0]<=a[5][0]/5&&a[1][0]<=a[6][0]/6&&a[1][0]<=a[7][0]/7&&a[1][0]<=a[8][0]/8&&a[1][0]<=a[9][0]/9&&a[1][0]<=a[10][0]/10){
//si viajar por kilometro es lo mas eficiente ya acabe
for(i=1;i<=n;i++)
printf("1 %ld\n",a[1][0]);
printf("%ld",n*a[1][0]);
}else{
a[1][55]=1;//a[i][55]=cuantos taxis debo tomar para encontrar la manera eficiente
a[1][54]=a[1][0];//a[i][54]=menor costo posible
a[1][1]=1;
//printf("1 %ld\n",a[1][54]);
for(j=2;j<11;j++){
//printf("%ld\n",j);
a[j][54]=a[j][0];
m=0;
for(i=1;ii;k--)
a[n][k]=a[n][k-1];
a[n][i]=o;
continue;
}
}
}
for(i=1;i<=a[n][55];i++){
printf("%ld %ld\n",a[n][i],a[(a[n][i])][0]);
}
printf("%ld",a[n][54]);
}
}
Me marca error en la primera prueba.
ResponderEliminarYa me aceptaron el codigo, el problema era que no consideraba que debian usarse la menor cantidad de taxis.
ResponderEliminar#include << stdio. h>>
long long a[101][56],i,j,k,p,o,m,n;
int main(){
for(i=1;i << 11;i++)
scanf("%lld",&a[i][0]);//a[i][0]=cuanto cuesta viajar un km
scanf("%lld",&n);
if(a[1][0] <i;k--)
a[n][k]=a[n][k-1];
a[n][i]=o;
continue;
}
}
}
for(i=1;i <<=a[n][55];i++){
printf("%lld %lld\n",a[n][i],a[(a[n][i])][0]);
}
printf("%lld",a[n][54]);
}
}