Cómo imprimir el siguiente patrón en Java

Antes que nada, déjame decirte que este código está en C ++ .

C ++ es el único lenguaje de código que conozco actualmente . Este problema parecía tentador, así que lo probé.

Pido disculpas por no enviar mi respuesta en Java .

Si desea ver las salidas para más casos, puede copiar directamente este código en el software IDE gratuito para C ++ llamado CodeBlocks .

De hecho, quiero que te concentres más en lo que está sucediendo en las estructuras de bucle. Si obtiene una imagen clara del algoritmo, creo que puede traducir fácilmente este código a Java. Así que así es como va el Código C ++ …

#include
usando el espacio de nombres estándar;
int main ()
{
int n, espacio = 1;
cout << "Ingrese su valor de entrada:";
cin >> n;
int p = n;
para (int i = 0; i <n; i ++)
{
si (n == 1)
{
cout << "*";
descanso;
}
más si (i == 3 || i == n-1)
{
p = n-1;
}
si (i% 2 == 0)
{
si (i == n-1)
{
p ++;
}
para (int j = 0; j <p-1; j ++)
{
para (int k = 0; k <2 * (espacio-1); k ++)
{
cout << "";
}
cout << "*" << endl;
}
}
más
{
p = n-1;
para (int k = 0; k <2 * (espacio-1); k ++)
{
cout << "";
}
para (int j = 0; j <p + 1; j ++)
{
cout << "*";
}
cout << endl;
}
espacio + = p * (i% 2);
}
devuelve 0;
}

Aquí hay algunas fotos más de diferentes casos de prueba …

Estos son los bucles que debe poner para obtener el resultado deseado.
Este programa se escribió en bloques de código en c ++, pero los bucles funcionan igual en ambos idiomas, por lo que también funcionaría en Java
pad es el valor que toma del usuario.

int contador = 0;
para (int i = 0; i {

si (i% 2! = 0)
{
para (int j = 0; j {
para (int k = 0; k cout << "";

cout << "*" << endl;
}
contador ++;

}
más
{

para (int k = 0; k cout << "";
para (int j = 0; j {
cout << "*";
}

cout << endl;
contador + = pad;
}

[editar]
He actualizado el código para una salida más precisa. Espero que ayude

si (pad == 1)
{
cout << "*";
}
más
{
para (int i = 1; i <= pad; i ++)
{
si (i% 2! = 0)
{
if (i == 1 || i == pad)
{
para (int j = 0; j {
para (int k = 0; k cout << "";

cout << "*" << endl;
}
}
más
{
{
para (int j = 0; j {
para (int k = 0; k cout << "";

cout << "*" << endl;
}
}

}

}
más
{

para (int k = 0; k cout << "";

para (int j = 0; j cout << "*";

cout << endl;
contador = contador + pad-1;
}

}
}

Puede intentar optimizar el código si lo desea. Lo hice a toda prisa, funciona en cpp en bloques de código
Aquí está la salida para la entrada 8.

He escrito mi lógica para imprimir el patrón dado. Según mi lógica, identifico las siguientes cosas:

  • El número tomado como entrada del usuario es en realidad el número de líneas (líneas verticales + horizontales de estrellas).
  • Si el número de línea, es decir, mi contador de bucle externo es impar, significa que es una línea vertical de estrellas y tenemos que imprimir * con un carácter de línea final (\ n) o System.out.println ().
  • Si el número de línea es par, solo tenemos que imprimir las estrellas con un espacio adecuado entre ellas.
  • Después de imprimir la primera línea horizontal, tenemos que cambiar nuestra línea vertical de estrellas a la última estrella de la línea horizontal. Para eso estoy dando un espaciado adecuado basado en el cálculo del número de caracteres para esa posición.

/ * paquete lo que sea; // ¡no coloques el nombre del paquete! * /

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

clase Ideone
{
public static void main (String [] args) arroja java.lang.Exception
{
int i, n, j, bandera;
// objeto del escáner para recibir información del usuario
Scanner sc = nuevo escáner (System.in);
// n es el número tomado de la entrada
n = sc.nextInt ();
int temp = 0;
int x = 1;
// bucle para ejecutar el número de veces dado (del usuario)
mientras que (x <= n)
{
bandera = 1;
// bucle para iterar e imprimir *
para (j = 1; j <= n; j ++)
{
// para la línea horizontal de *
si ((x)% 2 == 0)
{
si (j! = n)
System.out.print (“*”);
}
else // para la línea vertical de *
{
si (j == 1 && x! = 1)
{
System.out.println ();
}
más
{
// espaciado hasta el último * de la línea horizontal
para (i = 1; i <= temp; i ++)
System.out.print (“”);

si (j! = n)
System.out.print (“* \ n”);
más
System.out.print (“*”);
}
}
}
temp + = n-1;
x ++;
}
}
}

Gracias.

More Interesting

¿Qué matemáticas están involucradas en la base de datos?

Cómo verificar si un BigInteger es un cuadrado perfecto en C #

¿Por qué los informáticos / programadores usan la notación big-O en lugar de la función de tiempo de ejecución real?

¿Por qué la función gamma está diseñada de tal manera que su argumento se desplaza hacia abajo en 1 en comparación con la función factorial para enteros positivos?

¿Cómo han afectado los métodos numéricos y la potencia informática en bruto a las matemáticas puras y la física teórica?

¿Existe una diferencia importante entre los vectores con forma (D,) y (D, 1) o (1, D) en numpy?

¿Cuál es la definición estricta entre datos continuos y discretos?

¿Qué tipo de conocimiento matemático se requiere para una carrera en programación?

¿Puede un niño menor de 14 años que es malo en matemáticas aprender a programar juegos?

¿Qué es el análisis p delta?

Regresión logística, función softmax. ¿Por qué utiliza la función exponencial en la función sigmoidea?

En Python, ¿cómo sería el código si quisiera que el usuario ingrese un número de 3 dígitos y luego obtenga la suma de esos tres números individuales?

En un algoritmo de tiempo lineal, ¿cómo se comportaría el algoritmo si utilizáramos la mediana del máximo de cada conjunto de 5?

Con la inmensa potencia de procesamiento en las computadoras actuales, ¿no podemos recurrir al sistema decimal para la informática?

Dado que la programación va a ser cada vez más abstracta, ¿necesitamos estudiar más matemáticas para ser buenos en eso?