GeeksforGeeks App
Open App
Browser
Continue

# Print string of odd length in ‘X’ format

Given a string of odd length, print the string X format.
Examples :

```Input: 12345
Output:
1       5
2   4
3
2   4
1       5

Input: geeksforgeeks
Output:
g                         s
e                     k
e                 e
k             e
s         g
f      r
o
f     r
s         g
k             e
e                 e
e                      k
g                          s ```

We strongly recommend you to minimize your browser and try this yourself first.
The idea is to use two variables in a single loop, the first variable ‘i’ goes from left to right and second variable ‘j’ goes from right to left. The upper part of Cross (or X) is printed before they meet. The central character is printed when they meet and lower part is printed after they cross each other. In the upper part str[i] is printed before str[j] and in the lower part, str[j] is printed before str[i].

Below is the implementation of above idea.

## C++

 `// C++ program to print Cross pattern``#include ``using` `namespace` `std;` `// Function to print given string in cross pattern``// Length of string must be odd``void` `printPattern(string str)``{``    ``int` `len = str.length();` `    ``// i goes from 0 to len and j goes from len-1 to 0``    ``for` `(``int` `i = 0, j = len - 1; i <= len, j >= 0;``         ``i++, j--) {``        ``// To print the upper part. This loop runs``        ``// till middle point of string (i and j become``        ``// same``        ``if` `(i < j) {``            ``// Print i spaces``            ``for` `(``int` `x = 0; x < i; x++)``                ``cout << ``" "``;` `            ``// Print i'th character``            ``cout << str[i];` `            ``// Print j-i-1 spaces``            ``for` `(``int` `x = 0; x < j - i - 1; x++)``                ``cout << ``" "``;` `            ``// Print j'th character``            ``cout << str[j] << endl;``        ``}` `        ``// To print center point``        ``if` `(i == j) {``            ``// Print i spaces``            ``for` `(``int` `x = 0; x < i; x++)``                ``cout << ``" "``;` `            ``// Print middle character``            ``cout << str[i] << endl;``        ``}` `        ``// To print lower part``        ``else` `if` `(i > j) {``            ``// Print j spaces``            ``for` `(``int` `x = j - 1; x >= 0; x--)``                ``cout << ``" "``;` `            ``// Print j'th character``            ``cout << str[j];` `            ``// Print i-j-1 spaces``            ``for` `(``int` `x = 0; x < i - j - 1; x++)``                ``cout << ``" "``;` `            ``// Print i'h character``            ``cout << str[i] << endl;``        ``}``    ``}``}` `// Driver program``int` `main()``{``    ``printPattern(``"geeksforgeeks"``);``    ``return` `0;``}`

## Java

 `// Java program to``// print cross pattern``class` `GFG {` `    ``// Function to print given``    ``// string in cross pattern``    ``static` `void` `pattern(String str, ``int` `len)``    ``{` `        ``// i and j are the indexes``        ``// of characters to be``        ``// displayed in the ith``        ``// iteration i = 0 initially``        ``// and go upto length of string``        ``// j = length of string initially``        ``// in each iteration of i,``        ``// we increment i and decrement j,``        ``// we print character only``        ``// of k==i or k==j``        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``int` `j = len - ``1` `- i;``            ``for` `(``int` `k = ``0``; k < len; k++) {``                ``if` `(k == i || k == j)``                    ``System.out.print(str.charAt(k));``                ``else``                    ``System.out.print(``" "``);``            ``}``            ``System.out.println(``""``);``        ``}``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"geeksforgeeks"``;``        ``int` `len = str.length();``        ``pattern(str, len);``    ``}``}` `// This code is contributed``// by Smitha`

## Python3

 `# Python 3 program to``# print cross pattern` `# Function to print given``# string in cross pattern`  `def` `pattern(``str``, ``len``):` `    ``# i and j are the indexes``    ``# of characters to be``    ``# displayed in the ith``    ``# iteration i = 0 initially``    ``# and go upto length of string``    ``# j = length of string initially``    ``# in each iteration of i, we``    ``# increment i and decrement j,``    ``# we print character only of``    ``# k==i or k==j``    ``for` `i ``in` `range``(``0``, ``len``):` `        ``j ``=` `len` `-` `1` `-` `i``        ``for` `k ``in` `range``(``0``, ``len``):` `            ``if` `(k ``=``=` `i ``or` `k ``=``=` `j):``                ``print``(``str``[k],``                      ``end``=``"")``            ``else``:``                ``print``(end``=``" "``)` `        ``print``(``" "``)`  `# Driver code``str` `=` `"geeksforgeeks"``len` `=` `len``(``str``)``pattern(``str``, ``len``)` `# This code is contributed``# by Smitha`

## C#

 `// C# program to print``// cross pattern``using` `System;` `class` `GFG {` `    ``// Function to print given``    ``// string in cross pattern``    ``static` `void` `pattern(String str, ``int` `len)``    ``{` `        ``// i and j are the indexes``        ``// of characters to be``        ``// displayed in the ith``        ``// iteration i = 0 initially``        ``// and go upto length of string``        ``// j = length of string initially``        ``// in each iteration of i, we``        ``// increment i and decrement j,``        ``// we print character only of``        ``// k==i or k==j``        ``for` `(``int` `i = 0; i < len; i++) {``            ``int` `j = len - 1 - i;``            ``for` `(``int` `k = 0; k < len; k++) {``                ``if` `(k == i || k == j)``                    ``Console.Write(str[k]);``                ``else``                    ``Console.Write(``" "``);``            ``}``            ``Console.Write(``"\n"``);``        ``}``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``String str = ``"geeksforgeeks"``;``        ``int` `len = str.Length;``        ``pattern(str, len);``    ``}``}` `// This code is contributed by Smitha`

## PHP

 `= 0;``         ``\$i``++, ``\$j``--)``    ``{``        ``// To print the upper part.``        ``// This loop runs till middle point``        ``// of string i and j become same``        ``if` `(``\$i` `< ``\$j``)``        ``{``            ``// Print i spaces``            ``for` `(``\$x` `= 0; ``\$x` `< ``\$i``; ``\$x``++)``                ``echo` `" "``;` `            ``// Print i'th character``            ``echo` `\$str``[``\$i``];` `            ``// Print j-i-1 spaces``            ``for` `( ``\$x` `= 0; ``\$x` `< ``\$j` `- ``\$i` `- 1;``                                      ``\$x``++)``                ``echo` `" "``;` `            ``// Print j'th character``            ``echo` `\$str``[``\$j``].``"\n"``;``        ``}` `        ``// To print center point``        ``if` `(``\$i` `== ``\$j``)``        ``{``            ``// Print i spaces``            ``for` `(``\$x` `= 0; ``\$x` `< ``\$i``; ``\$x``++)``                ``echo` `" "``;` `            ``// Print middle character``            ``echo` `\$str``[``\$i``].``"\n"``;``        ``}` `        ``// To print lower part``        ``else` `if` `(``\$i` `> ``\$j``)``        ``{``            ``// Print j spaces``            ``for` `(``\$x` `= ``\$j` `- 1; ``\$x` `>= 0;``                                 ``\$x``--)``                ``echo` `" "``;` `            ``// Print j'th character``            ``echo` `\$str``[``\$j``];` `            ``// Print i-j-1 spaces``            ``for` `( ``\$x` `= 0; ``\$x` `< ``\$i` `- ``\$j` `- 1;``                                      ``\$x``++)``                ``echo` `" "``;` `            ``// Print i'h character``            ``echo` `\$str``[``\$i``].``"\n"``;``        ``}``    ``}``}` `// Driver code``printPattern(``"geeksforgeeks"``);` `// This code is contributed by mits``?>`

## Javascript

 ``

Output

```g           s
e         k
e       e
k     e
s   g
f r
o
f r
s   g
k     e
e       e
e         k
g           s```

Time Complexity: O(len*len), where len is the length of the string.
Auxiliary Space: O(1).

Alternative Solution :

## C++

 `// CPP program to print cross pattern``#include ``using` `namespace` `std;` `// Function to print given string in``// cross pattern``void` `pattern(string str, ``int` `len)``{` `    ``// i and j are the indexes of characters``    ``// to be displayed in the ith iteration``    ``// i = 0 initially and go upto length of``    ``// string``    ``// j = length of string initially``    ``// in each iteration of i, we increment``    ``// i and decrement j, we print character``    ``// only of k==i or k==j``    ``for` `(``int` `i = 0; i < len; i++) {``        ``int` `j = len - 1 - i;``        ``for` `(``int` `k = 0; k < len; k++) {``            ``if` `(k == i || k == j)``                ``cout << str[k];``            ``else``                ``cout << ``" "``;``        ``}``        ``cout << endl;``    ``}``}` `// driver code``int` `main()``{``    ``string str = ``"geeksforgeeks"``;``    ``int` `len = str.size();``    ``pattern(str, len);` `    ``return` `0;``}``// This code is contributed by Satinder Kaur`

## Java

 `// Java program to print cross pattern` `class` `GFG {` `    ``// Function to print given``    ``// string in cross pattern``    ``static` `void` `pattern(String str, ``int` `len)``    ``{` `        ``// i and j are the indexes of``        ``// characters  to be displayed``        ``// in the ith iteration i = 0``        ``// initially and go upto length``        ``// of string j = length of string``        ``// initially in each iteration``        ``// of i, we increment i and decrement``        ``// j, we print character only``        ``// of k==i or k==j``        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``int` `j = len - ``1` `- i;``            ``for` `(``int` `k = ``0``; k < len; k++) {``                ``if` `(k == i || k == j)``                    ``System.out.print(str.charAt(k));` `                ``else``                    ``System.out.print(``" "``);``            ``}``            ``System.out.println(``""``);``        ``}``    ``}` `    ``// driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"geeksforgeeks"``;``        ``int` `len = str.length();``        ``pattern(str, len);``    ``}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python 3 program to print cross pattern` `# Function to print given string in``# cross pattern`  `def` `pattern(st, length):` `    ``# i and j are the indexes of characters``    ``# to be displayed in the ith iteration``    ``# i = 0 initially and go upto length of``    ``# string``    ``# j = length of string initially``    ``# in each iteration of i, we increment``    ``# i and decrement j, we print character``    ``# only of k==i or k==j``    ``for` `i ``in` `range``(length):``        ``j ``=` `length ``-` `1` `-` `i``        ``for` `k ``in` `range``(length):``            ``if` `(k ``=``=` `i ``or` `k ``=``=` `j):``                ``print``(st[k], end``=``"")``            ``else``:``                ``print``(``" "``, end``=``"")``        ``print``()`  `# driver code``if` `__name__ ``=``=` `"__main__"``:` `    ``st ``=` `"geeksforgeeks"``    ``length ``=` `len``(st)``    ``pattern(st, length)`

## C#

 `// C# program to print cross pattern``using` `System;` `class` `GFG {` `    ``// Function to print given``    ``// string in cross pattern``    ``static` `void` `pattern(String str, ``int` `len)``    ``{` `        ``// i and j are the indexes of``        ``// characters to be displayed``        ``// in the ith iteration i = 0``        ``// initially and go upto length``        ``// of string j = length of string``        ``// initially in each iteration``        ``// of i, we increment i and decrement``        ``// j, we print character only``        ``// of k==i or k==j``        ``for` `(``int` `i = 0; i < len; i++) {``            ``int` `j = len - 1 - i;``            ``for` `(``int` `k = 0; k < len; k++) {``                ``if` `(k == i || k == j)``                    ``Console.Write(str[k]);` `                ``else``                    ``Console.Write(``" "``);``            ``}``            ``Console.WriteLine(``""``);``        ``}``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``String str = ``"geeksforgeeks"``;``        ``int` `len = str.Length;``        ``pattern(str, len);``    ``}``}` `// This code is contributed by Rajput-Ji`

## PHP

 ``

## Javascript

 ``

Output

```g           s
e         k
e       e
k     e
s   g
f r
o
f r
s   g
k     e
e       e
e         k
g           s```

Time Complexity: O(len*len), where len is the length of the string.
Auxiliary Space: O(1).

Solution 3: This problem can also be solved by observing that the characters are printed along the left and right diagonals only if we enclose the pattern within a matrix. Now, if the length of the string is len then the pattern can be enclosed within a square matrix of order len

• The elements along the left diagonal can be accessed by the condition ( i==j ) where i and j are the row and column numbers respectively.
• The elements along the right diagonal can be accessed by the condition (i+j == len-1).

So, run a nested loop of order len and fill the positions satisfying at the above two conditions with respective characters and the rest of the positions with blank spaces.
Below is the implementation of the above approach:

## CPP

 `// C++ program to print the given pattern` `#include ``using` `namespace` `std;` `// Function to print the given``// string in respective pattern``void` `printPattern(string str, ``int` `len)``{``    ``for` `(``int` `i = 0; i < len; i++) {``        ``for` `(``int` `j = 0; j < len; j++) {``            ``// Print characters at corresponding``            ``// places satisfying the two conditions``            ``if` `((i == j) || (i + j == len - 1))``                ``cout << str[j];``            ``// Print blank space at rest of places``            ``else``                ``cout << ``" "``;``        ``}` `        ``cout << endl;``    ``}``}` `// Driver Code``int` `main()``{``    ``string str = ``"geeksforgeeks"``;` `    ``int` `len = str.size();` `    ``printPattern(str, len);` `    ``return` `0;``}` `// This code and Approach is contributed by``// Aravind Kimonn`

## Java

 `// Java program to print the given pattern``import` `java.io.*;``class` `GFG {` `    ``// Function to print the given``    ``// string in respective pattern``    ``static` `void` `printPattern(String str, ``int` `len)``    ``{``        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``for` `(``int` `j = ``0``; j < len; j++) {` `                ``// Print characters at corresponding``                ``// places satisfying the two conditions``                ``if` `((i == j) || (i + j == len - ``1``))``                    ``System.out.print(str.charAt(j));` `                ``// Print blank space at rest of places``                ``else``                    ``System.out.print(``" "``);``            ``}` `            ``System.out.println();``        ``}``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"geeksforgeeks"``;``        ``int` `len = str.length();``        ``printPattern(str, len);``    ``}``}` `// This code is contributed by rag2127.`

## Python3

 `# Python3 program to print the given pattern` `# Function to print the given``# string in respective pattern`  `def` `printPattern(``Str``, ``Len``):``    ``for` `i ``in` `range``(``Len``):``        ``for` `j ``in` `range``(``Len``):` `            ``# Print characters at corresponding``            ``# places satisfying the two conditions``            ``if` `((i ``=``=` `j) ``or` `(i ``+` `j ``=``=` `Len` `-` `1``)):``                ``print``(``Str``[j], end``=``"")` `            ``# Print blank space at rest of places``            ``else``:``                ``print``(``" "``, end``=``"")``        ``print``()`  `Str` `=` `"geeksforgeeks"``Len` `=` `len``(``Str``)``printPattern(``Str``, ``Len``)` `# This code is contributed by divyeshrabadiya07.`

## C#

 `// C# program to print the given pattern``using` `System;``public` `class` `GFG {` `    ``// Function to print the given``    ``// string in respective pattern``    ``static` `void` `printPattern(``string` `str, ``int` `len)``    ``{``        ``for` `(``int` `i = 0; i < len; i++) {``            ``for` `(``int` `j = 0; j < len; j++) {` `                ``// Print characters at corresponding``                ``// places satisfying the two conditions``                ``if` `((i == j) || (i + j == len - 1))``                    ``Console.Write(str[j]);` `                ``// Print blank space at rest of places``                ``else``                    ``Console.Write(``" "``);``            ``}``            ``Console.WriteLine();``        ``}``    ``}` `    ``// Driver code``    ``static` `public` `void` `Main()``    ``{``        ``String str = ``"geeksforgeeks"``;``        ``int` `len = str.Length;``        ``printPattern(str, len);``    ``}``}` `// This code is contributed by avanitrachhadiya2155`

## Javascript

 ``

Output

```g           s
e         k
e       e
k     e
s   g
f r
o
f r
s   g
k     e
e       e
e         k
g           s```

Time Complexity: O(len*len), where len is the length of the string.
Auxiliary Space: O(1).