Dado un valor n, necesitamos imprimir el siguiente patrón en consecuencia, usando solo espacio extra constante.
Ejemplos:
Input : n = 1 Output : x Input : n = 2 Output : x x x x Input: n = 5 Output: x x o x o x x o x o x x o x o x x Input: n = 6 Output: x x o x o x x o x x o x x o x x o x x o x o x x Input : n = 7; Output : x x o x o x x o x x o x x o x o x o x x o x x o x x o x o x x Input : n = 8; Output : x x o x o x x o x x o x o x o x x o x o o x o x x o x o x o x x o x x o x o x x
Podemos dividir este problema en 3 partes:
1) Imprime la mitad superior con n-1 líneas para n impar o n-2 líneas para n par.
2) Imprime líneas intermedias, 1 línea para n impar o 3 líneas para n par.
3) Imprime la mitad inferior, con n-1 líneas para n impar o n-2 líneas para n par.
Para patrones tan complejos, puede ser más fácil si podemos usar la indexación basada en 1
y funciones separadas para imprimir caracteres que comiencen con x o o.
C++
// Author:: Satish Srinivas #include <iostream> using namespace std; // print alternate x o beginning with x void printx(int n) { for (int i = 1; i <= n; i++) { if (i % 2 != 0) cout << "x "; else cout << "o "; } return; } // print alternate x o beginning with o void printo(int n) { for (int i = 1; i <= n; i++) { if (i % 2 != 0) cout << "o "; else cout << "x "; } return; } // print the pattern for n void printPattern(int n) { // upper half // n-1 lines for odd, n-2 lines for even int x = n; if (n % 2 == 0) x = x - 1; // number of spaces to leave in each line int p = n - 1; // number of characters in each line int s = 1; // prints double lines in each iteration for (int i = 1; i <= (x - 1) / 2; i++) { for (int j = 1; j <= p; j++) { cout << " "; } if (i % 2 != 0) printx(s); else printo(s); cout << endl; p++; for (int j = 1; j <= p; j++) cout << " "; if (i % 2 != 0) printx(s); else printo(s); cout << endl; p--; s++; } // extra upper middle for even if (n % 2 == 0) { for (int i = 1; i <= p; i++) cout << " "; if (n % 4 != 0) printx(n / 2); else printo(n / 2); cout << endl; } // middle line if (n % 2 != 0) printx(n); else { if (n % 4 != 0) { printx(n / 2); printx(n / 2); } else { printx(n / 2); printo(n / 2); } } cout << endl; // extra lower middle for even if (n % 2 == 0) { cout << " "; printx(n / 2); cout << endl; } // lower half p = 1; if (n % 2 == 0) { x--; p = 2; } int q = x / 2; // one line for each iteration for (int i = 1; i <= x; i++) { for (int j = 1; j <= p; j++) cout << " "; printx(q); if (i % 2 == 0) q--; cout << endl; p++; } cout << endl; } // Driver code int main() { int n = 7; printPattern(n); n = 8; printPattern(n); return 0; }
Java
// java program to Print symmetric // double triangle pattern class GFG { // print alternate x o beginning with x static void printx(int n) { for (int i = 1; i <= n; i++) { if (i % 2 != 0) System.out.print("x "); else System.out.print("o "); } return; } // print alternate x o beginning with o static void printo(int n) { for (int i = 1; i <= n; i++) { if (i % 2 != 0) System.out.print("o "); else System.out.print("x "); } return; } // print the pattern for n static void printPattern(int n) { // upper half n-1 lines for // odd, n-2 lines for even int x = n; if (n % 2 == 0) x = x - 1; // number of spaces to leave in each line int p = n - 1; // number of characters in each line int s = 1; // prints double lines in each iteration for (int i = 1; i <= (x - 1) / 2; i++) { for (int j = 1; j <= p; j++) { System.out.print(" "); } if (i % 2 != 0) printx(s); else printo(s); System.out.println(); p++; for (int j = 1; j <= p; j++) System.out.print(" "); if (i % 2 != 0) printx(s); else printo(s); System.out.println(); p--; s++; } // extra upper middle for even if (n % 2 == 0) { for (int i = 1; i <= p; i++) System.out.print(" "); if (n % 4 != 0) printx(n / 2); else printo(n / 2); System.out.println(); } // middle line if (n % 2 != 0) printx(n); else { if (n % 4 != 0) { printx(n / 2); printx(n / 2); } else { printx(n / 2); printo(n / 2); } } System.out.println(); // extra lower middle for even if (n % 2 == 0) { System.out.print(" "); printx(n / 2); System.out.println(); } // lower half p = 1; if (n % 2 == 0) { x--; p = 2; } int q = x / 2; // one line for each iteration for (int i = 1; i <= x; i++) { for (int j = 1; j <= p; j++) System.out.print(" "); printx(q); if (i % 2 == 0) q--; System.out.println(); p++; } System.out.println(); } // Driver code public static void main (String[] args) { int n = 7; printPattern(n); n = 8; printPattern(n); } } // This code is contributed by Anant Agarwal.
Python3
# Python3 program to Print symmetric # double triangle pattern # Print alternate x o beginning with x def printx(n): for i in range(1, n + 1): if (i % 2 != 0): print("x ", end = "") else: print("o ", end = "") return # Print alternate x o beginning with o def printo(n): for i in range(1, n + 1): if (i % 2 != 0): print("o ", end = "") else: print("x ", end = "") return # Print the pattern for n def printPattern(n): # upper half # n-1 lines for odd, # n-2 lines for even x = n if (n % 2 == 0): x = x - 1 # number of spaces to leave # in each line p = n - 1 # number of characters in each line s = 1 # prints double lines in each iteration for i in range(1, (x - 1) // 2 + 1): for j in range(1, p + 1): print(" ", end = "") if (i % 2 != 0): printx(s) else: printo(s) print() p += 1 for j in range(1, p + 1): print(" ", end = "") if (i % 2 != 0): printx(s) else: printo(s) print() p -= 1 s += 1 # extra upper middle for even if (n % 2 == 0): for i in range(1, p + 1): print(" ", end = "") if (n % 4 != 0): printx(n // 2) else: printo(n // 2) print() # middle line if (n % 2 != 0): printx(n) else: if (n % 4 != 0): printx(n // 2) printx(n // 2) else: printx(n // 2) printo(n // 2) print() # extra lower middle for even if (n % 2 == 0): print(" ", end = "") printx(n // 2) print() # lower half p = 1 if (n % 2 == 0): x-=1 p = 2 q = x // 2 # one line for each iteration for i in range(1, x + 1): for j in range(1, p + 1): print(" ", end = "") printx(q) if (i % 2 == 0): q -= 1 print() p += 1 print() # Driver code n = 7 printPattern(n) n = 8 printPattern(n) # This code is contributed by mohit kumar
Javascript
<script> // JavaScript program to Print symmetric // double triangle pattern // print alternate x o beginning with x function printx(n) { for (var i = 1; i <= n; i++) { if (i % 2 !== 0) document.write("x "); else document.write("o "); } return; } // print alternate x o beginning with o function printo(n) { for (var i = 1; i <= n; i++) { if (i % 2 !== 0) document.write("o "); else document.write("x "); } return; } // print the pattern for n function printPattern(n) { // upper half n-1 lines for // odd, n-2 lines for even var x = n; if (n % 2 === 0) x = x - 1; // number of spaces to leave in each line var p = n - 1; // number of characters in each line var s = 1; // prints double lines in each iteration for (var i = 1; i <= (x - 1) / 2; i++) { for (var j = 1; j <= p; j++) { document.write(" "); } if (i % 2 !== 0) printx(s); else printo(s); document.write("<br>"); p++; for (var j = 1; j <= p; j++) document.write(" "); if (i % 2 != 0) printx(s); else printo(s); document.write("<br>"); p--; s++; } // extra upper middle for even if (n % 2 === 0) { for (var i = 1; i <= p; i++) document.write(" "); if (n % 4 !== 0) printx(n / 2); else printo(n / 2); document.write("<br>"); } // middle line if (n % 2 !== 0) printx(n); else { if (n % 4 !== 0) { printx(n / 2); printx(n / 2); } else { printx(n / 2); printo(n / 2); } } document.write("<br>"); // extra lower middle for even if (n % 2 === 0) { document.write(" "); printx(n / 2); document.write("<br>"); } // lower half p = 1; if (n % 2 === 0) { x--; p = 2; } var q = x / 2; // one line for each iteration for (var i = 1; i <= x; i++) { for (var j = 1; j <= p; j++) document.write(" "); printx(q); if (i % 2 === 0) q--; document.write("<br>"); p++; } document.write("<br>"); } // Driver code var n = 7; printPattern(n); n = 8; printPattern(n); </script>
Producción:
x x o x o x x o x x o x x o x o x o x x o x x o x x o x o x x x x o x o x x o x x o x o x o x x o x o o x o x x o x o x o x x o x x o x o x x
La complejidad de tiempo del programa anterior es .
Este artículo es una contribución de Satish Srinivas . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a contribuir@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA