Cómo escribir un programa para los siguientes criterios

Supongo que este es uno de los problemas de SPOJ.com – Problema HPYNOS.

Aquí hay una forma de hacerlo: use una estructura de datos llamada HashMap que facilite las cosas. Para saber sobre H ashMap, consulte aquí Java The HashMap Class

  • Escribe un método para agregarSquaresofDigits
  • Use hashmap para almacenar los resultados del método anterior. Si el resultado ya está en el mapa, entonces no puede ser un número feliz.
  • En el ejemplo a continuación llega a 20 y luego nuevamente a 4, nunca llegará a 1. Por lo tanto, no puede ser un número feliz. En este contexto, el mapa viene a nuestro rescate.
  204 -> 20 -> 4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4
  • Código en Java:
  import java.io.BufferedReader;
	 import java.io.InputStreamReader;
	 importar java.util.HashMap;
	 import java.util.Map;


 Prueba de clase pública {
 // Método para agregar cuadrados de dígitos en el número
	    static int addSquaresofDigits (int n) {
		    int rem, suma = 0;
		    mientras que (n! = 0) {
				  rem = n% 10;
				  suma = suma + rem * rem;
				  n = n / 10;
			  }
		    suma de retorno;
	    }
		 public static void main (String [] args) lanza Exception {
			 // TODO Código auxiliar de método generado automáticamente
			 BufferedReader br = new BufferedReader (nuevo InputStreamReader (System.in));
		  int T = Integer.parseInt (br.readLine ()), count = 0, sum = 0, flag = 0, rem, temp;
		  Map  map = new HashMap  ();
		  // Para verificar si el mapa ya contiene el resultado.
		  while (! map.containsKey (T)) {
			  temp = T;
	          sum = addSquaresofDigits (T);
			  map.put (temp, sum);
			  T = suma;
			  recuento ++;
 // Si la suma es 1, entonces es un número feliz.
			  if (suma == 1) {
				  bandera = 1;
				  rotura;
			  }
		  }
		  System.out.println (flag == 1? "Número feliz" + "Se necesita" + cuenta + "para el proceso": "No es un número feliz");
		 }
	 }

La parte fácil es que simplemente puede iterar como se menciona en su caso. Es bastante fácil
La parte difícil es saber si la iteración terminará o no. Entonces, cuando obtienes un 1, la iteración terminará, pero puede haber un caso en el que haya un bucle infinito. ¿Entonces tienes que verificar en qué caso? ¿Pero cómo?
Habrá un bucle infinito si y solo si un número se repite en la iteración, por lo que alcanzará el mismo número después de un conjunto de iteraciones. Entonces, ¿cómo verificar la repetición?
Solo usa hashing. Como la suma no puede ser mayor que un cierto valor, simplemente cree una matriz con espacio suficiente para todos los números posibles durante cada iteración, es decir, para un número máximo de tres dígitos, la suma máxima podría ser 9² + 9² 9², así que simplemente cree una matriz con tamaño más que esto y cada vez marque el número. Si el número ya está marcado, entonces está formando un ciclo y simplemente finaliza el ciclo.
O simplemente para la prueba de ciclo, almacene los números intermedios en una matriz y busque el número cada vez que itera para verificar los ciclos.
Creo que eso es suficiente.
Feliz codificación 🙂

aquí hay una vista abstracta de la solución … puede especificar la condición de salida para números no felices.

public static void happyNum (Prueba de enteros) {
int cuadrado = 0;
if (prueba == 1) {
System.out.println (“yay !! estoy feliz”);
} más {
if (prueba / 10 == 0) {
cuadrado = prueba * prueba;
System.out.println (cuadrado);
happyNum (cuadrado);
} más {
cuadrado = prueba;
int suma = 0;
while (cuadrado! = 0) {
int temp = cuadrado% 10;
suma = suma + (temp * temp);
cuadrado = cuadrado / 10;
}
System.out.println (suma);
happyNum (suma);
}

}
}

  import java.util.Scanner;

 clase pública HappyNumber {

	 public static void main (String [] args) {

		 Scanner sc = nuevo escáner (Recursos e información del sistema. ¡Este sitio web está a la venta!);
		 while (verdadero) {
			 int input = sc.nextInt ();

			 if (entrada == 0) {
				 sc.close ();
				 System.exit (0);
			 }

			 System.out.println (processInput (input));
		 }
	 }

	 Proceso de cadena estática privada (entrada int) {

		 int cuadrado = input * input;

		 while (cuadrado> 9) {

			 cuadrado = squareAndAddDigits (cuadrado);
		 }

		 return checkHappyNumber (cuadrado);
	 }

	 private static int squareAndAddDigits (int i) {
		 int suma = 0;
		 mientras que (i> 0) {
			 adición + = (i% 10) * (i% 10);
			 i = i / 10;
		 }

		 devolución adicional;
	 }

	 Private static String checkHappyNumber (int i) {
		 si (i == 1)
			 devolver "número feliz";

		 devolver "No es un número feliz";
	 }
 }

Nota: Este código no está completamente probado y no tiene ninguna garantía de mi parte para trabajar en todos los escenarios posibles. Sin embargo, esto dará una idea de cómo podemos hacerlo fácilmente.

Algo
1. Solicite información y guárdela (supongamos que la almacena en X)
2. Compruebe si es un número o algo más
3. Si se trata de otra cosa, entonces ……… y finalice, de lo contrario continúe
4. Cuadra X y guárdalo en V.
5. Inicie un ciclo, continúe el ciclo a menos que el valor de ‘V’ sea menor que 7
5.1 Inicie un bucle donde ‘V’ se divide por 10 y se almacena en V. Aquí, almacene los restos en una matriz, deténgase si ‘V’ es igual a 0.
5.2 Inicie un bucle sobre los elementos de la matriz, donde un número en la matriz se multiplica por sí mismo y agrega continuamente a ‘V’, que fue ‘0’ después del paso anterior.
5.3 Fin del bucle
6. Si V = 1, imprima “X es un número feliz”, de lo contrario imprima “X no es un número feliz”.
7. Fin

Estos son los números felices del 1 al 1000.
1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100, 103, 109, 129, 130, 133, 139, 167, 176, 188, 190, 192, 193, 203, 208, 219, 226, 230, 236, 239, 262, 263, 280, 291, 293, 301, 302, 310, 313, 319, 320, 326, 329, 331, 338, 356, 362, 365, 367, 368, 376, 379, 383, 386, 391, 392, 397, 404, 409, 440, 446, 464, 469, 478, 487, 490, 496, 536, 556, 563, 565, 566, 608, 617, 622, 623, 632, 635, 637, 638, 644, 649, 653, 655, 656, 665, 671, 673, 680, 683, 694, 700, 709, 716, 736, 739, 748, 761, 763, 784, 790, 793, 802, 806, 818, 820, 833, 836, 847, 860, 863, 874, 881, 888, 899, 901, 904, 907, 910, 912, 913, 921, 923, 931, 932, 937, 940, 946, 964, 970, 973, 989, 998, 1000

Si te hubieras dado cuenta
10, 70, 100, 130, 190, 230, 280, 310, 320, 440, 490, 680, 700, 790 820, 860, 910, 940, 970, 1000
Son 10 veces los primeros 20 números:
1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100

Ahora hablemos sobre el pseudocódigo

  1. Primero, vea si nuestro número tiene más de un dígito.
  1. En caso afirmativo, divida el número en un solo dígito y multiplique cada dígito por sí mismo. Luego suma los resultados de la multiplicación en una sola suma, o total.
  2. Si no, multiplique el número por sí mismo para obtener un total.
  • Vea si el total, de cualquiera de las operaciones del Paso 2, es un número en la lista de números que indica que es un número infeliz (4, 16, 37, 58, 89, 145, 42, 20).
    1. En caso afirmativo, nuestro número inicial es un número infeliz. Deja de evaluar.
    2. Si no, repita este proceso de evaluación de varios dígitos en el Paso 1 hasta que el resultado sea 1.
  • Cuando el resultado es 1, confirmamos que es un número feliz.
  • No sabía que se suponía que debíamos ayudar con los problemas de tarea en Quora.

    More Interesting

    ¿Se espera que escriba un código perfecto en su primer intento en entrevistas tecnológicas?

    En entrevistas tecnológicas, ¿cómo podemos escribir un código que sea limpio, conciso, optimizado en tiempo y espacio y que cubra todos los casos básicos y de borde de una vez?

    ¿Cuáles son las preguntas de entrevista más importantes para Java (núcleo y avanzado tanto)?

    Cómo quejarme de mi compañero de cuarto que está engañando en sus entrevistas telefónicas de Google

    Cómo descifrar entrevista técnica de MNC

    ¿Cuáles son las mejores preguntas que hacen los entrevistadores en la entrevista relacionada con C, si va a realizar una entrevista de la compañía 5-6 CTC?

    Cómo prepararme para una entrevista para un puesto de diseñador de juegos

    Al responder una pregunta en una entrevista de programación, ¿es mejor comenzar siempre con enfoques básicos antes de discutir los más complejos?

    Se le da una lista de N intervalos. ¿Encuentra la longitud del subconjunto más grande de intervalos de modo que no haya tres intervalos en el subconjunto que compartan un punto común?

    ¿Cuáles son buenas preguntas de entrevista para una pasantía?

    ¿Cuál es el proceso de entrevista de Amazon y qué tipo de preguntas hacen cuando se presenta como nuevo?

    He estado codificando durante 6 meses y siento que codifico muy lentamente en comparación con otras personas que he visto. ¿Es este un problema muy importante?

    ¿De dónde obtienen la mayoría de los entrevistadores sus preguntas de entrevistas técnicas de informática?

    ¿Cuáles son algunas de las asombrosas preguntas de rompecabezas formuladas en una entrevista de empresa de TI?

    Cómo prepararse para la entrevista en el campus de Triveni Turbines