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
This article is contributed by Satish Srinivas. If you like neveropen and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the neveropen main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!