Ejercicio Java

S

Hola buenas , alguien me puede dar alguna idea para resolver esto :

Consiste en colocar varias hormigas en diferentes posiciones de una fina pista de una
determinada longitud.
Las hormigas no tienen demasiada libertad de movimientos, por lo que
únicamente pueden ir hacia un lado o hacia el otro de la pista. Eso sí, podemos asegurar que cada hormiga correrá por su carril y no chocará con otra.
Cuando se colocan las hormigas en la pista (recordemos que cada una estará en diferentes posiciones), no se sabe en qué sentido comenzará a desplazarse cada una… pero se quiere saber cuáles son el mínimo y el máximo tiempo posible que tardarán todas las hormigas en llegar a uno de los extremos de la pista, sabiendo que todas se mueven a la misma velocidad,de un centímetro por segundo.

Por ejemplo, si la pista tiene una longitud de 10 centímetros, y tenemos hormigas en las
posiciones 2, 6 y 7, como mínimo las hormigas tardarán 4 segundos en terminar todas, y como máximo 8.
¿Cuánto tardarán como mínimo y como máximo en completar la carrera 4 hormigas situadas en las posiciones 3, 11, 12 y 13 de una pista de 20 centímetros?

¿Y 8 hormigas en las posiciones 6, 10, 11, 14, 18, 20, 22 y 27 de una de 35?

--
Lo primero que he hecho es un if para separar cuando hay 4 hormigas y cuando hay 8 y bueno a partir de ahí me pierdo mucho . tengo pensado hacer un for pero no se muy bien como llevarlo

pd: no se muy bien colgar imagenes lo siento jaja

Fyn4r

El maximo es facil, comprobando para cada hormiga cuanto tarda en llegar al principio y al final.
Para el mínimo te quedas con los mínimos de cada hormiga y de ahi coges el máximo. Por ejemplo, en el caso en el que están en las posiciones 2, 6 y 7 los mínimos son 2, 4 y 3, de ahi te quedas con el 4.

No se si me he explicado muy bien xd

1 1 respuesta
S
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CarreraHormigas {
	public static void main(String[] args){
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		try{
			System.out.println("Cuantas hormigas hay en la pista");
			int numerodehormigas =Integer.parseInt(in.readLine());
			int min=0;
			if (numerodehormigas==4){
				
			
			int [] hormigas= new int [4];
			int [] posiciones = new int [4];
			int numeromenor= 0;
			hormigas[0]=3;
			hormigas[1]=11;
			hormigas[2]=12;
			hormigas[3]=13;
			//posicion
			int x=20;
			System.out.println("Las Hormigas tardarán");
			for(int j=0;j<hormigas.length;j++){
				
				posiciones[j]= x-hormigas[j];
				System.out.println("Hormiga"+(j+1)+" : "+posiciones[j] + "s");
				
				if(posiciones[j] < numeromenor){  
				     numeromenor = posiciones[j];  
				        }  
			}
		}
		if(numerodehormigas==8){
			int [] hormigas= new int [8];
			int [] posiciones = new int [8];
			int numeromenor= 0;
			hormigas[0]=6;
			hormigas[1]=10;
			hormigas[2]=11;
			hormigas[3]=14;
			hormigas[4]=18;
			hormigas[5]=20;
			hormigas[6]=22;
			hormigas[7]=27;
			
			int x=35;
			
			for(int j=0;j<hormigas.length;j++){
				
				posiciones[j]= x-hormigas[j];
				System.out.println("Hormiga"+(j+1)+" : "+posiciones[j] + "s");
			}
		}
	}catch(Exception e){
		System.out.println(e);
	}
}
}

al final he puesto esto .quiero cambiar el system out para que solo me salgan los mínimos y los máximos del array

QuitCat

#1 Esta hecho en c# pero es muy parecido a java.
La lógica esta clara, es la que ha dicho #2, aunque seguro que se puede hacer mas sencillo, calculando modulos o usando LINQ

spoiler

Usuarios habituales