Get the best out of our app
GeeksforGeeks App
Open App
Browser
Continue

# 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 ` `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

 ``

## 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 GeeksforGeeks 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 GeeksforGeeks 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.

My Personal Notes arrow_drop_up