本文概述
给定一个奇数长度的字符串, 输出字符串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
。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。