Skip to content
Related Articles

Related Articles

Improve Article

Print string of odd length in ‘X’ format

  • Difficulty Level : Basic
  • Last Updated : 12 Oct, 2021
Geek Week

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 parted 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<iostream>
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




<?php
// PHP program to print
// Cross pattern
 
// Function to print given
// string in cross pattern,
// Length of string must be odd
function printPattern($str)
{
    $len = strlen($str);
 
    // i goes from 0 to len and
    // j goes from len-1 to 0
    for ($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 ($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




<script>
 
// javascript program to
// prvar cross pattern // Function to prvar given
// string in cross pattern
function 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 = 0; i < len; i++)
    {
        var j = len - 1 - i;
        for (k = 0; k < len; k++)
        {
            if (k == i || k == j)
                document.write(str.charAt(k));
            else
                document.write(" ");
        }
        document.write("<br>");
    }
}
 
// Driver code
str = "geeksforgeeks";
var len = str.length;
pattern(str, len);
 
// This code is contributed by Amit Katiyar
</script>

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

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




<?php
// PHP program to print
// cross pattern
 
// Function to print given
// string in cross pattern
function 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 = 0; $i < $len; $i++)
    {
        $j = $len -1 - $i;
        for ($k = 0; $k < $len; $k++)
        {
            if ($k == $i || $k == $j)
                echo $str[$k];
            else
                echo " ";
        }
        echo "\n";
    }
}
 
// Driver code
$str = "geeksforgeeks";
$len = strlen($str);
pattern($str, $len);
 
// This code is contributed by mits
?>

Javascript




<script>
 
// Javascript program to print cross pattern
 
// Function to print given 
// string in cross pattern
function 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 (var i = 0; i < len; i++)
    {
        var j = len -1 - i;
        for (var k = 0; k < len; k++)
        {
            if (k == i || k == j)
                document.write(str.charAt(k));
                 
            else
                document.write(" ");
        }
        document.write('<br>');    
    }
}
 
// driver code
var str = "geeksforgeeks";
var len = str.length;
pattern(str, len);
 
 
// This code is contributed by 29AjayKumar
 
</script>

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

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




<script>
// javascript program to print the given pattern
 // Function to print the given
  // string in respective pattern
  function printPattern(str , len)
  {
    for(var i = 0; i < len; i++)
    {
      for(var j = 0; j < len; j++)
      {  
 
        // Print characters at corresponding
        // places satisfying the two conditions
        if((i == j) || (i + j == len - 1))
          document.write(str.charAt(j));
 
        // Print blank space at rest of places
        else
          document.write(" ");
      }
 
      document.write('<br>');
    }
  }
 
  // Driver code
  var str = "geeksforgeeks";
  var len = str.length;
  printPattern(str, len);
 
// This code is contributed by 29AjayKumar
</script>

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

https://youtu.be/7gyjMrezEos 
 

This article is contributed by Dinesh T.P.D. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :