Print string of odd length in 'X' format (original) (raw)

Last Updated : 11 Sep, 2023

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.

Try It Yourselfredirect icon

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

len=strlen(len = strlen(len=strlen(str); // i goes from 0 to len and // j goes from len-1 to 0 for ($i = 0, j=j = j=len - 1; i<=i <= i<=len, $j >= 0; i++,i++, 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<x < x<i; $x++) echo " "; // Print i'th character echo str[str[str[i]; // Print j-i-1 spaces for ( x=0;x = 0; x=0;x < j−j - ji - 1; $x++) echo " "; // Print j'th character echo str[str[str[j]."\n"; } // To print center point if ($i == $j) { // Print i spaces for ($x = 0; x<x < x<i; $x++) echo " "; // Print middle character echo str[str[str[i]."\n"; } // To print lower part else if ($i > $j) { // Print j spaces for ($x = j−1;j - 1; j1;x >= 0; $x--) echo " "; // Print j'th character echo str[str[str[j]; // Print i-j-1 spaces for ( x=0;x = 0; x=0;x < i−i - ij - 1; $x++) echo " "; // Print i'h character echo str[str[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 <bits/stdc++.h> 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

i<i < i<len; $i++) { j=j = j=len -1 - $i; for ($k = 0; k<k < k<len; $k++) { if ($k == i∣∣i || i∣∣k == $j) echo str[str[str[k]; else echo " "; } echo "\n"; } } // Driver code $str = "geeksforgeeks"; len=strlen(len = strlen(len=strlen(str); pattern($str, $len); // 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).

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.

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 <bits/stdc++.h> 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).
This article is contributed by Dinesh T.P.D.