以X格式打印奇数长度的字符串

2021年3月13日17:00:37 发表评论 877 次浏览

本文概述

给定一个奇数长度的字符串, 输出字符串X格式。

例子 :

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

Input: lsbin
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

我们强烈建议你最小化浏览器, 然后自己尝试。

这个想法是在一个循环中使用两个变量, 第一个变量" i"从左到右, 第二个变量" j"从右到左。十字(或X)的上部在相遇之前已被打印。当它们相遇时将打印中心字符, 并且在彼此相交后将打印下部。在上部, str [i]在str [j]之前打印;在下部, str [j]在str [i]之前打印。

以下是上述想法的实现。

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
         // til 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 spances
             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( "lsbin" );
     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 = "lsbin" ;
     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 = "lsbin"
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 = "lsbin" ;
     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 til 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 spances
             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( "lsbin" );
 
// This code is contributed by mits
?>

输出: 

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

替代解决方案:

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 = "lsbin" ;
     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 = "lsbin" ;
     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 = "lsbin"
     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 = "lsbin" ;
     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 = "lsbin" ;
$len = strlen ( $str );
pattern( $str , $len );
 
// This code is contributed by mits
?>

输出: 

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

解决方案3

:也可以通过观察将字符包围在矩阵中来观察字符沿左右对角线的打印方式来解决。现在, 如果字符串的长度是

然后可以将图案包含在阶数的方阵中

.

  • 可以通过条件访问沿左对角线的元素(i == j)其中i和j分别是行号和列号。
  • 可以通过条件访问右对角线上的元素(i + j == len-1).

因此, 运行一个嵌套的订单循环

并在满足上述两个条件的职位上分别填上相应的字符, 并在其余职位上填写空白。

下面是上述方法的实现:

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[i];
             // Print blank space at rest of places
             else
                 cout<< " " ;
         }
         
         cout<<endl;
     }
}
 
// Driver Code
int main()
{
     string str = "lsbin" ;
     
     int len = str.size();
     
     printPattern(str, len);
     
     return 0;
}
 
// This code and Approach is contributed by
// Aravind Kimonn

输出: 

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

本文作者:

Dinesh T.P.D

。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: