Super.D Posted April 9, 2015 at 05:45 PM Report Share #581004 Posted April 9, 2015 at 05:45 PM Boa tarde! Tenho um problema que não sei onde está. :/ O exercício é este: Ponto de água Os fogos florestais são um dos maiores flagelos que assolam os países nos períodos de maior calor. Durante o combate a um incêndio, é essencial que os tanques dos veículos que estão a ser utilizados (i.e., autotanques, helicópteros e aviões) possam ser reabastecidos no menor espaço de tempo possível. Com esta finalidade, diversos pontos de água (locais onde os veiculos de combate a incêndios podem reabastecer os seus depósitos de água) são identificados no terreno. Devido às suas dimensões e condições gerais nem todos os pontos de água são adequados para encher os depósitos de todos os tipos de veículos. Problema Ajuda os bombeiros a determinar qual o ponto de água adequado para um determinado veículo e que se encontra mais próximo deste. Helicópteros e aviões movem-se na horizontal, vertical e diagonal para chegar a um ponto de água. Considera que os autotanques se movem na vertical e na horizontal. Não se podem mover na diagonal. Dados de entrada A primeira linha identifica o tipo t de veículo que precisa ser reabastecido (T para autoTanque, H para Helicóptero e A para Avião). A segunda linha contém as coordenadas x e y (separadas por um espaço) correspondentes à localização deste veículo. A terceira linha contém o número n de pontos de água existentes. Finalmente as restantes n linhas têm um número i que identifica o ponto de água, as coordenadas xi e yi (separadas por um espaço) e a descriminação de todos os tipos de veículos que estão aptos a reabastecer os seus tanques neste ponto de água ("T", "TH", ou "THA"), todos separados por um espaço. Restrições t ∈ {T, H, A} 0 ≤ i ≤ 100000, i inteiro 1 ≤ n ≤ 10000, n inteiro 0 ≤ x, y, xi, yi ≤ 10000, x, y, xi, yi inteiros ti ∈ {T, TH, THA} Dados de saída Os dados de saída são compostos por uma única linha com o identificador i do ponto de água mais próximo do veículo de entre aqueles que o veículo pode utilizar para se reabastecer. Se um veículo está à mesma distância de dois ou mais pontos de água, escolha o que tenha o menor identificador i. Exemplo dos dados de entrada 1 H 10 10 5 5 30 60 T 1 50 50 THA 4 1 1 TH 3 3 15 TH 2 11 10 T Exemplo dos dados de saída 1 3 Exemplo dos dados de entrada 2 T 10 8 13 13 2 12 THA 9 12 8 TH 0 14 10 T 10 0 8 THA 3 11 3 THA 5 8 11 TH 2 2 4 TH 7 2 12 T 8 7 4 T 1 11 7 THA 11 12 13 TH 6 11 9 TH 12 0 8 T Exemplo dos dados de saída 2 1 Tudo bem, já o tenho estruturado. O código funciona, no exemplo 1, o output está correto. Mas quando chega ao exemplo dois, o output também está correcto, mas ainda é acrescentada uma linha que acho que é esta (não tenho a certeza): 12 0 8 T O código é este (está todo junto pois na plataforma que enviou temos de enviar as classes todas juntas): import java.util.Scanner; public class MooshakExH { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Veiculo veiculo = new Veiculo(sc.nextLine(), sc.nextInt(), sc.nextInt()); Distancia distancia; double menor = 999; int indice = 0; int nPontosDeAgua = sc.nextInt(); Dados[] dados = new Dados[nPontosDeAgua]; for (int i = 0; i < nPontosDeAgua; i++) { dados[i] = new Dados(sc.nextInt(), sc.nextInt(), sc.nextInt(), sc.nextLine()); } for (int i = 0; i < nPontosDeAgua; i++) { if (dados[i].getVeiculosAdquados().contains(veiculo.getTipoVeiculo())) { distancia = new Distancia(veiculo.getCoordenada_x(), veiculo.getCoordenada_y(), dados[i].getCoordenada_x(), dados[i].getCoordenada_y()); if (distancia.calcular() < menor) { menor = distancia.calcular(); indice = i; } } } System.out.println(dados[indice].getIdentificador()); } } class Veiculo { private String tipoVeiculo; private int coordenada_x, coordenada_y; public Veiculo(String tipoVeiculo, int coordenada_x, int coordenada_y) { this.tipoVeiculo = tipoVeiculo; this.coordenada_x = coordenada_x; this.coordenada_y = coordenada_y; } public String getTipoVeiculo() { return tipoVeiculo; } public int getCoordenada_x() { return coordenada_x; } public int getCoordenada_y() { return coordenada_y; } } class Dados { private int identificador; private int coordenada_x; private int coordenada_y; private String veiculosAdquados; public Dados(int identificador, int coordenada_x, int coordenada_y, String veiculosAdquados) { this.identificador = identificador; this.coordenada_x = coordenada_x; this.coordenada_y = coordenada_y; this.veiculosAdquados = veiculosAdquados; } public int getIdentificador() { return identificador; } public int getCoordenada_x() { return coordenada_x; } public int getCoordenada_y() { return coordenada_y; } public String getVeiculosAdquados() { return veiculosAdquados; } } class Distancia { private int TransporteDistancia_x; private int TransporteDistancia_y; private int PontoDeAgua_x; private int pontoDeAgua_y; private double distancia_total; public Distancia(int TransporteDistancia_x, int TransporteDistancia_y, int PontoDeAgua_x, int pontoDeAgua_y) { this.TransporteDistancia_x = TransporteDistancia_x; this.TransporteDistancia_y = TransporteDistancia_y; this.PontoDeAgua_x = PontoDeAgua_x; this.pontoDeAgua_y = pontoDeAgua_y; } public int getTransporteDistancia_x() { return TransporteDistancia_x; } public int getTransporteDistancia_y() { return TransporteDistancia_y; } public int getPontoDeAgua_x() { return PontoDeAgua_x; } public int getPontoDeAgua_y() { return pontoDeAgua_y; } public double calcular() { double temp; temp = Math.pow(this.PontoDeAgua_x - this.TransporteDistancia_x, 2) + Math.pow(this.pontoDeAgua_y - this.TransporteDistancia_y, 2); distancia_total = Math.sqrt(temp); return distancia_total; } } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 9, 2015 at 06:12 PM Report Share #581006 Posted April 9, 2015 at 06:12 PM qual é mesmo a questão ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Super.D Posted April 9, 2015 at 06:21 PM Author Report Share #581009 Posted April 9, 2015 at 06:21 PM A questão está dentro do spoiler... Tenho de introduzir qual o tipo de veiculo (se é autoTanque, Helicopetero ou Avião), em seguida introduzo as coordenadas onde o veiculo se encontra, depois quantos pontos de água têm disponíveis. Depois cada linha que introduzo é seguida de um identificador, da coordenada x e y e o tipo de veiculos, exemplo THA (qualquer veiculo pode abastecer). Depois tenho calcular qual o ponto mais perto das coordenadas do veiculo e retornar o identificador mais proximo. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 9, 2015 at 06:49 PM Report Share #581011 Posted April 9, 2015 at 06:49 PM sim, mas já tens o código ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Super.D Posted April 9, 2015 at 06:54 PM Author Report Share #581013 Posted April 9, 2015 at 06:54 PM (edited) Esquece. LOL. Na universidade devia tar a dar um bug qualquer... Mas já está correto. Testei agora e está a funcionar. 🙂 Edited April 9, 2015 at 06:58 PM by Super.D Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now