Unidad 1

Entrada y salida estándar, Scanner, Print Writter, ejercicios

Entrada Estandar

						
Scanner sc = new Scanner(System.in);

//Leer una linea completa
String a = sc.nextLine(); 

//Leer una palabra hasta un espacio
String b = sc.next(); 

//Leer un entero
int a = sc.nextInt(); 						
						
					

Salida Estandar

						
System.out.print("Texto sin salto de linea");
System.out.println("Salto de linea");
double pi = 3.141592654;
System.out.printf("%.4f\n", pi);
//3.1416
						
					

Printf

						
int a = 5;
double b = 3.141592654;
String c = "Hola mundo";
System.out.printf("Int: %d Double: %f String: %s\n", a,b,c);
//Int: 5 Double: 3.141593 String: Hola mundo

System.out.printf("%04d %.3f", a,b);
//0005 3.142
						
					

Estructura de un ejercicio tipo maratón

Enunciado: Dados dos numeros a y b, retornar a+b.

Entradas: Un numero n indicando el número de casos de prueba. Luego n lineas con dos enteros a y b separados por espacios.

Salidas: Para cada caso imprimir una linea con a+b

Entradas Salidas
3
1 2
5 9
10 14
3
14
24

Estructura de la solución

						
import java.util.*;

public class Main {
  public static void main (String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    while(n > 0){
      System.out.println(sc.nextInt()+sc.nextInt());
      n--;
    }
  }
}
						
					

Tipos de entradas

Entrada individual

Un solo caso de prueba.

            
Scanner sc = new Scanner(System.in);
System.out.println(sc.nextInt()+sc.nextInt());
            
          

Número de casos de prueba

Primero se indica cuantos casos de prueba se evaluaran, y posteriormente se indica cada caso.

            
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while(n > 0){
  System.out.println(sc.nextInt()+sc.nextInt());
  n--;
}

            
          

EOF

Se evaluan varios casos de prueba, pero no se indica cuantos. El programa debe leer mientras aun queden datos por evaluar.

            
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
  System.out.println(sc.nextInt()+sc.nextInt());
}
            
          

Optimizando Scanner

https://github.com/ProgramacionCompetitivaUFPS/notebook

¿Como usarlo?

            
import java.util.*;
import java.io.*;

public class Main {
  public static void main (String[] args) throws IOException{
    Scanner sc = new Scanner();
    int a = Integer.parseInt(sc.next());
    int b = Integer.parseInt(sc.next());
    System.out.println(a+b);
  }
  static class Scanner{
    //Copiar código del link
  }
}
            
          

Scanner Optimizado: Métodos

Método Función
nextLine() Lee el renglón entero hasta llegar a un salto de linea. Retorna un string.
next() Lee de la entrada hasta encontrar un espacio, un salto de linea. Retorna un string.
hasNext() Indica si hay mas datos esperando por ser leídos. Retorna un boolean.

Optimizar Salidas

            
PrintWriter bw = new PrintWriter(System.out);
bw.print("Texto");
bw.println("Texto");
bw.printf("Texto", parametro);

bw.flush(); 
            
          

¡Resolvamos un problema!

A - Cheating Knight

https://acm.javeriana.edu.co/maratones/2016/01/

La tierra del Rey Black es una superficie plana que se extiende infinitamente en cuadrados blancos y negros, muy similar a un tablero de ajedrez infinito. El área de cada cuadrado es exactamente 1m^2. Sir Humpsalot es un caballero que vive en la tierra del Rey Black. Por ley, los caballeros sólo podrán moverse saltando desde el centro de una plaza al centro de otro cuadrado, siempre que la distancia entre los centros es exactamente √D metros.

Aunque Sir Humpsalot realiza saltos de √D metros, no se molesta en caer en el centro de una plaza. En otras palabras, a veces cae en una esquina de un cuadrado o incluso en la frontera entre las casillas adyacentes, lo que sea más conveniente. Llegar a su destino suele ser más fácil de esta manera.

Teniendo en cuenta que Sir Humpsalot comienza en el centro de la plaza de coordenadas (0, 0) y tiene que viajar hasta el centro de la plaza de coordenadas (X, Y), su tarea consiste en calcular el número mínimo de saltos que Sir Jumpsalot necesita para llegar a su destino.

Input: La entrada empieza con una linea conteniendo un entero T, el número de casos de prueba. Luego para cada caso se encuentra una linea con 3 enteros X, Y y Z separados por espacios, indicando el cuadrado de la distancia realizada en un salto simple, y las coordenadas del destino final. 1 ≤ D ≤ 108 y −104 ≤ X, Y ≤ 104.

Output: Para cada caso de prueba, imprime una linea con un simple entero J, el minimo número de saltos necesarios para alcanzar el destino.

Input Output
5
5 0 0
5 2 3
25 -3 -4
100 0 -100
1 2345 6789
0
2
1
10
7183

Solución

            

import java.util.*;
import java.lang.*;
import java.io.*;

public class cheating {
  public static void main (String[] args) throws java.lang.Exception {
    Scanner sc = new Scanner();
    int t = Integer.parseInt(sc.next());
    double d, x, y, dist;
    while(t > 0){
      d = Double.parseDouble(sc.next());
      x = Double.parseDouble(sc.next());
      y = Double.parseDouble(sc.next());
      dist = Math.sqrt((x * x + y * y) / d );
      if(dist > 0 && dist < 1){
      	dist = 2;
      }
      System.out.printf("%.0f\n",Math.ceil(dist));
      t--;
    }
  }
  static class Scanner{
    //Insertar la clase incluida en el github.
  }
}