Print symmetric double triangle pattern
Given a value n, we need to print the following pattern accordingly, using only constant extra space.
Examples:
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
We can divide this problem into 3 parts:
1) Print upper half with n-1 lines for odd n or n-2 lines for even n.
2) Print middle lines, 1 line for odd n or 3 lines for even n.
3) Print lower half, with n-1 lines for odd n or n-2 lines for even n.
For such complex patterns it may be easier if we can use 1-based indexing
and separate functions to print characters beginning with x or 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> |
C#
// c# equivalent of above java code using System; 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) Console.Write( "x " ); else Console.Write( "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) Console.Write( "o " ); else Console.Write( "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++) { Console.Write( " " ); } if (i % 2 != 0) PrintX(s); else PrintO(s); Console.WriteLine(); p++; for ( int j = 1; j <= p; j++) Console.Write( " " ); if (i % 2 != 0) PrintX(s); else PrintO(s); Console.WriteLine(); p--; s++; } // extra upper middle for even if (n % 2 == 0) { for ( int i = 1; i <= p; i++) Console.Write( " " ); if (n % 4 != 0) PrintX(n / 2); else PrintO(n / 2); Console.WriteLine(); } // 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); } } Console.WriteLine(); // extra lower middle for even if (n % 2 == 0) { Console.Write( " " ); PrintX(n / 2); Console.WriteLine(); } // 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++) Console.Write( " " ); PrintX(q); if (i % 2 == 0) q--; Console.WriteLine(); p++; } Console.WriteLine(); } // Driver code public static void Main (String[] args) { int n = 7; PrintPattern(n); n = 8; PrintPattern(n); } } |
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 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
Time Complexity: .
Auxiliary Space: O(1) because it is using constant space for variables