miércoles, 26 de noviembre de 2014

3n + 1 (uva 100)

Los problemas en informática se clasifican a menudo de acuerdo a un cierto tipo (p.e. irresolubles, recursivos, imposibles,...). En este problema analizareis una propiedad de un algoritmo cuya clasificación no es conocida para todas las posibles entradas.

El Problema:

Considera el siguiente algoritmo
1. input n

2. print n

3. if n = 1 then STOP

4. if n is odd then tex2html_wrap_inline44

5. else tex2html_wrap_inline46

6. GOTO 2


Dada como entrada el número 22, se imprimirían la siguiente secuencia de números 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

Se supone que el algoritmo anterior terminará (cuando se imprime un uno) para cualquier valor entero. A pesar de la simplicidad del algoritmo, se desconoce si la suposición/conjetura es cierta. Ha sido verificada, sin embargo, para todos los enteros n tales que 0

Dada una entrada n, es posible detrerminar el número de números impresos (incluyendo al uno). Para un número n se le llama longitud de ciclo n. En el ejemplo superior, la longitud de ciclo de 22 es 16.
Para cualesquiera números i y j tienes que determinar la longitud de ciclo para todos los números entre i y j.


La entrada.

Consistirá en un par de enteros i y j, un par de enteros por línea. Todos los enteros menores que 1000000 y mayores que cero.

Debes procesar todos los pares de enteros y determinar el ciclo de longitud máxima comprendida entre esos dos valores incluyendo i y j.

Ppuedes asumir  que no habrá operaciones mayores que enteros de 32 bits.

La salida.

Para cada par de enteros i y j debes mostrar i, j y la máxima longitud de ciclo para los enteros comprendidos e incluyendo i y j. Estos tres números se mostrarán separados por un espacio, uno por  línea. Los enteros i y j deben aparecer en el mismo orden que aparecen en la entrada y deben ir seguidos de la longitud de ciclo máxima (en la misma línea.

Sample Input

1 10
100 200
201 210
900 1000

Sample Output

1 10 20
100 200 125
201 210 89
900 1000 174



Explicación y solución: serverfault.com/questions/40156/puppet-force-service-restart-after-configuration-file-was-modified package pkg3nmas1;
import java.util.Scanner;

/**
*
* @author juan
*/
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    
        Scanner leer = new Scanner(System.in);
        int num1,num2,mayor,menor,maximo;
        while (leer.hasNextInt()) {
            num1=leer.nextInt();
            num2=leer.nextInt();
            menor=Math.min(num2, num1);
            mayor=Math.max(num2, num1);
        
            maximo=0;
            for (int i = menor; i <=mayor; i++) {
                maximo= Math.max(maximo, cuentaSaltos(i));
            }
            System.out.println(num1+ " " + num2 + " " + maximo);
        
        
        }
      

lunes, 24 de noviembre de 2014

Ejercicio 39

package ejercicio38;

/**
*
* @author juan
*/
public class Ejercicio38 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String cadena;
        int centenas, decenas, unidades;
        //unidades=decenas=centenas=0;
   
        for (int i = 100; i < 1000; i++) {
           cadena=String.valueOf(i);
       
           unidades=Character.getNumericValue(cadena.charAt(cadena.length()-1));
           decenas = Character.getNumericValue(cadena.charAt(1));
           centenas=Character.getNumericValue(cadena.charAt(0));
           if (i==(int)(Math.pow(unidades, 3)+Math.pow(decenas, 3)+Math.pow(centenas, 3)))

Ejercicio 34: Divisiones mediante restas sucesivas

package ejercicio34;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Ejercicio34 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int cont, dividendo, divisor, dividendoInicial,divisorInicial;
        boolean salir=false;
       
 

viernes, 21 de noviembre de 2014

Modificar el programa para que calcule la media de todos los alumnos

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package notas;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Notas {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int nota,media,numAlus,suma=0,numAsig=10;
        Scanner leer = new Scanner(System.in);
       
        do {
            System.out.println("Introduzca el número de alumnos");
            numAlus= leer.nextInt();
        } while (numAlus<=0);
       
        for (int i = 0; i < numAlus; i++) {
            suma=0;
            for (int j = 1; j <= numAsig; j++) {
                System.out.println("Introduzca la nota de la asignatura "+j);
                do {
                    nota=leer.nextInt();
                } while (nota<0 || nota >10);
                suma+=nota;
            }
            System.out.println("La media es: " + (suma/numAsig));
   
        }
      
    }
   
}

miércoles, 19 de noviembre de 2014

Ejercicio 32: Acertar un número aleatorio en x intentos

package ejercicio32;
import java.util.Scanner;
import java.util.Random;
/**
*
* @author juan
*/
public class Ejercicio32 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int cont=0,intentos;
        int num,oculto;
        Random al = new Random();
        Scanner leer = new Scanner(System.in);
        boolean acertado= false;
  

Programame: Hola mundo ( 116 )

¡Hola mundo!

Tiempo máximo: 1,000 s  Memoria máxima: 2048 KiB
Dicen los viejos que en este país el latín era una asignatura obligatoria por la que todos los estudiantes de bachillerato tenían que pasar.
Dicen los viejos que el primer día de clase de latín cualquiera esperaba que los alumnos salieran sabiendo el "rosa rosae".
Dicen los viejos que esa era la primera declinación.
Quizá, dentro de muchos años, nosotros seamos los viejos que contemos batallitas de cómo se enseñaba informática. Y quizá entonces, digamos que en la primera clase de cualquier curso en el que se explicara un lenguaje de programación, se tenía que salir habiendo escrito "un hola mundo".
Y eso es lo que vamos a hacer. Escribir un programa que escriba tantos "hola mundo" como nos pidan.

Entrada

La entrada consta de una única línea que contiene un número n, 0 ≤ n ≤ 5, que indica cuántos mensajes hay que emitir.

Salida

Cada mensaje a escribir aparecerá en una única línea y será la cadena "Hola mundo.".

Entrada de ejemplo

3

Salida de ejemplo

Hola mundo.
Hola mundo.
Hola mundo.

lunes, 17 de noviembre de 2014

UVA 11715 - Car (coche)

Estás en un coche y vas a la velocidad u m/s. Tu aceleración a es constante. Tras un tiempo particular t, tu velocidad será v m/s y tu desplazamiento es s. Ahora se te dan algunos (no todos) los valores para dichas variables. Tienes que encontrar los parámetros perdidos.

Entrada/Input
El fichero de entrada puede contener múltiples casos de prueba. Cada caso puede ser uno de los siguientes:

1 u v t
2 u v a
3 u a s
4 v a s

La entrada terminará con un simple 0.

Salida/Output
Para cada caso de tu entrada tienes que imprimir una línea que contenga el número de caso y:


Si es 1 u v t se te darán y deberás imprimir  s y a
Si es 2 u v a se te darán y deberás imprimir  s y t
Si es 3 u a s se te darán y deberás imprimir  v y t
Si es 4 v a s se te darán y deberás imprimir  u y t

Comprueba los ejemplos para mas detalles. Puedes asumir que los casos dados no te conducirán a una situación no válida. Usa 'double' para todos los cálculos y la salida de todos los números con tres decimales.

Sample Input
Output for Sample Input
1 10 5 2.0
1 5 10.0 2
2 10 11 2
3 5 1 6
4 5.0 -1 6
0
Case 1: 15.000 -2.500
Case 2: 15.000 2.500
Case 3: 5.250 0.500
Case 4: 6.083 1.083
Case 5: 6.083 1.083

Problem Setter: Jane Alam Jan
Special Thanks: Md. Shiplu Hawlader



jueves, 13 de noviembre de 2014

Ejercicio 30 bis: Sumar los x primeros números primos

package ejercicio302;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Ejercicio302 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner (System.in);
        int num,suma=0,cont,i;
        String cadena="";
       
        System.out.println("Introduzca el número de primos a sumar");
        num=leer.nextInt();
        cont=0;
        i=1;
 

Ejercicio 30: Listar los números primos hasta un número dado

package ejercicio30;

import java.util.Scanner;

/**
*
* @author juan
*/
public class Ejercicio30 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner (System.in);
        int numero;
       
        System.out.println("Introduzca un número (para mostrar los primos entre 1 y se número");
        numero = leer.nextInt();
        for (int i = 1; i <=numero ; i++) {
            if (esPrimo(i)) System.out.print(" "+i);
        }
    }
   
    //Devuelve true en caso de que el número sea primo o false en caso contrario
    public static boolean esPrimo(int num){
        boolean primo;
        int cont,raiz;
       
        primo=true;
        cont=2;
        raiz = (int)Math.sqrt(num);
        while (primo &&(cont<=raiz)){
            if (num%cont ==0) primo=false;
            else ++cont;
        }
        return primo;
    }
   
}

Ejercicio 29: Comprobar si un número es primo

los primos hay que comprobarlos hasta la raíz cuadrada del número...

package ejercicio29numerosprimos;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Ejercicio29NumerosPrimos {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        boolean primo;
        int num;
        int cont,raiz;
        Scanner leer = new Scanner(System.in);
       
        System.out.println("Introduzca un número para comprobar si es primo");
        num=leer.nextInt();
       
        primo=true;
        cont=2;
        raiz = (int)Math.sqrt(num);
        while (primo &&(cont<=raiz)){
            if (num%cont ==0) primo=false;
            else ++cont;
        }
       
        if (primo==true) System.out.println("El número es primo");
        else System.out.println("NO es primo, es divisible al menos entre "+cont);
    }
   
}

miércoles, 12 de noviembre de 2014

Ejercicio 27: Cálculo de la media de una serie de notas

package ejercicio27;
import java.util.Scanner;

/**
*
* @author juan
*/
public class Ejercicio27 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int nota, suma, cont;
        char seguir;
       
        do {
            suma = cont = 0;
            do {
                System.out.println("Introduzca una nota (negativa para salir)");
                nota = leer.nextInt();
                if (nota > 10) {
                    System.out.println("Por favor introduzca notas menores de 10");
                } else if (nota >= 0) {
                    suma += nota;
                    ++cont;
                }
            } while (nota >= 0);
            System.out.println("La media del alumno es: " + suma / cont);
            System.out.println("Desea introducir la nota de más alumnos");
            seguir = leer.next().toUpperCase().charAt(0);
        } while (seguir == 'S');
   
    }
   
}

Ejercicio 26: Descomponer una cantidad en billetes

package ejercicio26;
import java.util.Scanner;

/**
*
* @author juan
*/
public class Ejercicio26 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       Scanner leer = new Scanner (System.in);
       int cantidad, numB,resta;
       
       do {
            System.out.println("Introduzca cantidad");
            cantidad = leer.nextInt();
        } while (cantidad<0);
       
       /*
        numB=0;
        while (cantidad>=100) {
            numB++;
            cantidad-=100;
        }
        if (numB!=0)System.out.println("El número de billetes de 100 es: "+numB);
        */
        cantidad= getNumBilletes(cantidad,100);
        cantidad= getNumBilletes(cantidad,50);
        cantidad= getNumBilletes(cantidad,20);
        cantidad= getNumBilletes(cantidad,10);
        cantidad= getNumBilletes(cantidad,5);
        cantidad= getNumBilletes(cantidad,2);
        cantidad= getNumBilletes(cantidad,1);
  

Ejercicio 24: Suma de pares e impares entre dos números dados

package ejercicio24;
import java.util.Scanner;

/**
*
* @author juan
*/
public class Ejercicio24 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int mayor, menor, num1, num2, par=0, impar=0;
       
        do {
            num1=getNum();
            num2=getNum();
            if (num1==num2) System.out.println("Los números de la serie no pueden ser iguales");
        } while (num1==num2);
       
        if (num1>num2) {
            mayor = num1;
            menor = num2;
        }
        else
        {
            mayor = num2;
            menor = num1;
        }
       
        for (int i = menor; i <= mayor; i++) {
            if (i%2==0) par+=i;
            else impar+=i;
        }
     

viernes, 7 de noviembre de 2014

Ejercicio 22: Triángulo de Floyd

package ejercicio22floyd;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Ejercicio22Floyd {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int num,cont=1;
        do {           
            System.out.println("Introduzca la cantidad de números que se leerán: ");
            num = leer.nextInt();
        } while (num<=0);
       
       
        for (int linea = 1; linea <= num; linea++)
         {
            for (int j = 1; j <= linea; j++) {
                System.out.print(cont+" ");
                ++cont;
            }
            System.out.println("");
           
           
        }
   
    }
   
   
}

Ejercicio 21: Calcular el mayor y el menor de una serie de números

Esta solución publicada es la de una lectura fuera del bucle (podríamos emplear el valor máximo de enteros modificando el if de dentro del bucle (eliminando la palabra else)).

public class Ejercicio21 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner leer = new Scanner (System.in);
        int num, cantidad,mayor, menor;
       
        //mayor= Integer.MIN_VALUE;
        //menor= Integer.MAX_VALUE;
       
        do {           
            System.out.println("Introduzca la cantidad de números que se leerán: ");
            cantidad = leer.nextInt();
        } while (cantidad<=0);
       
   

ejercicio 18: Sumar pares e impares con uno / dos bucles

public class Ejercicio18 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int sumPar=0,sumImpar=0;
       
        for (int i = 1; i <= 1000; i++) {
            if (i%2==0) {
                sumPar+=i;
            } else sumImpar+=i;
        }
        System.out.println("pares: "+ sumPar);
        System.out.println("impares: "+ sumImpar);
       
       
        sumImpar=0;
        for (int i = 1; i <= 1000; i+=2) {
            sumImpar+=i;
        }
       
        sumPar=0;
        for (int i = 2; i <= 1000; i+=2) {
            sumPar+=i;
       
        }
        System.out.println("pares: "+ sumPar);
        System.out.println("impares: "+ sumImpar);

    }
   
}

Ejercicio 17: Media de 30 valores

public class Ejercicio17AcumuladoresMedia {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int suma=0;
        for (int i = 1; i <= 1000; i++) {
            suma+=i;//suma=suma+i;
            System.out.println(i+": "+ suma);
        }
        System.out.println("Media"+((double)suma/30));
       
    }
   
}

Ejercicio 15: comprobar si la fecha es correcta

package ejercicio15fechascorrectas;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Ejercicio15FechasCorrectas {

    /**
     * @param args the command line arguments
     */
    public static boolean esBisiesto(int num){
        return ( (num%4==0 && num%100!=0)|| (num%500==0) );
    }
    public static void main(String[] args) {
        int dia,mes,anho;
        Scanner leer = new Scanner(System.in);
        boolean correcta=true;
        String mensaje="";
       
        System.out.println("Introduzca el día");
        dia = leer.nextInt();
        System.out.println("Introduzca el día");
        mes = leer.nextInt();
        System.out.println("Introduzca el día");
        anho = leer.nextInt();
       
  

miércoles, 5 de noviembre de 2014

Ejercicio 14: Fechas correctas


package ejercicio15fechascorrectas;
import java.util.Scanner;
/**
*
* @author juan
*/
public class Ejercicio15FechasCorrectas {

    /**
     * @param args the command line arguments
     */
    public static boolean esBisiesto(int num){
        return ( (num%4==0 && num%100!=0)|| (num%500==0) );
    }
    public static void main(String[] args) {
        int dia,mes,anho;
        Scanner leer = new Scanner(System.in);
        boolean correcta=true;
        String mensaje="";
       
        System.out.println("Introduzca el día");
        dia = leer.nextInt();
        System.out.println("Introduzca el día");
        mes = leer.nextInt();
        System.out.println("Introduzca el día");
        anho = leer.nextInt();
       
        switch (mes) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
    

lunes, 3 de noviembre de 2014

Recursividad: fibonacci

   public static void main(String[] args) {
        String cadena;
       
      
       
        for (int i =1; i < 9; i++) {
            System.out.print(fibo(i)+ ",");
        }
    }
   
   
    public static int fibo (int num){
        int retorno;
       
        if ( (num == 1) || (num ==2) ){ 
            retorno=1;
        }
        else {
            retorno = fibo(num-1)+fibo(num-2);
        }
        return retorno;
    }
           
}