UVa: Problema 10055 - Hashmat the Brave Warrior

04 Mar 2011
2 mins read

Vamos resolver o problema nº 10055, chamado de Hashmat the Brave Warrior em java.

No primeiro post, comentei sobre o primeiro problema que geralmente é resolvido no UVa. Vou começar a postar uma série de posts sobre da categoria AOAPC I: Beginning Algorithm Contests. O primeiro volume é o volume 0 - Getting Started. Assim vamos aumentando gradativamente a dificuldade e vamos abordar vários algoritmos, de fácil e difícil.

Descrição do Problema:

Hashmat é um guerreiro que move de um lugar para outro para lutar com seus oponentes. Antes de lutar, ele faz apenas um cálculo: a diferença entre a quantidade de soldados que ele tem e a quantidade de soldados do oponente. Com esse número calculado, ele decide se deve lutar ou não.

No input teremos dois números: n1 e n2. Esse números representam o número de soldados do Hashmat e do oponente ou vice versa. Os números não são maiores que 2^32. Devemos ler a entrada até que não tenha mais nada para ler.

No output (saída) teremos que imprimir a diferença entre os números.

Dicas para resolver o problema em Java:

Código:

[code lang="java" firstline="1" toolbar="true" collapse="false" wraplines="false"]
package com.loiane.volume0;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
* Problem 10055 - Hashmat the Brave Warrior
*
* Use long long data type + absolute function.
*
* Problem Link:
* http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=996
*
* Runtime: 1.980s
*
* @author Loiane Groner
* https://loiane.com
* http://loianegroner.com
*/
public class P10055 {

public static void main(String[] args) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
long n1, n2;
String[] num;
while ((line = in.readLine()) != null)
{
num = line.split(" ");
n1 = Long.parseLong(num[0]);
n2 = Long.parseLong(num[1]);
System.out.println(calcAbsDiff(n1,n2));
}
}

public static long calcAbsDiff(long n1, long n2){
return Math.abs(n2-n1);
}
}
[/code]

Testando a entrada e saída:

[code lang="java" firstline="1" toolbar="true" collapse="false" wraplines="false"]
package com.loiane.test.volume0;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import com.loiane.volume0.P10055;

/**
* Test Case
* Problem 10055 - Hashmat the Brave Warrior
*
* @author Loiane Groner
* https://loiane.com
* http://loianegroner.com
*/
public class TestP10055 {

@Test
public void testProblem10055(){

assertEquals(2, P10055.calcAbsDiff(10, 12));
assertEquals(4, P10055.calcAbsDiff(10, 14));
assertEquals(100, P10055.calcAbsDiff(100, 200));
}
}
[/code]

Bons códigos!