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

Previous
Next