算法设计(打印对称双三角图案)

本文概述

  • 建议:在继续解决方案之前, 请先在{IDE}上尝试使用你的方法。
  • C ++
  • Java
  • Python3
  • C#
  • 的PHP
给定一个值n, 我们需要仅使用恒定的额外空间相应地打印以下模式。
例子:
Input : n = 1Output : xInput : n = 2Output : x x x x Input: n = 5Output:xx o x o x x o x o x x o x o x x Input: n = 6Output:x x o x o x x o x x o x x o x x o x x o x o x xInput : n = 7; Output :x x o x o x x o x x o x x o x o x o x x o x x o x x o x o x x Input : n = 8; Output : x x o x o x x o x x o x o x o x x o x o o x o x x o x o x o x x o x x o x o x x

推荐:请尝试以下方法{IDE}首先, 在继续解决方案之前。我们可以将此问题分为三个部分:
1)用奇数n的n-1行或偶数n的n-2行打印上半部分。
2)打印中间行, 奇数n为1行, 偶数n为3行。
3)打印下半部分, 对奇数n用n-1行, 对于偶数n用n-2行。
对于这种复杂的模式, 如果我们可以使用基于1的索引可能会更容易
以及单独的功能来打印以x或o开头的字符。
C ++
// Author:: Satish Srinivas #include < iostream> using namespace std; // print alternate x o beginning with x void printx( int n) { for ( int i = 1; i < = n; i++) { if (i % 2 != 0) cout < < "x " ; else cout < < "o " ; } return ; }// print alternate x o beginning with o void printo( int n) { for ( int i = 1; i < = n; i++) { if (i % 2 != 0) cout < < "o " ; else cout < < "x " ; } return ; }// print the pattern for n void printPattern( int n) { // upper half // n-1 lines for odd, n-2 lines for even int x = n; if (n % 2 == 0) x = x - 1; // number of spaces to leave in each line int p = n - 1; // number of characters in each line int s = 1; // prints double lines in each iteration for ( int i = 1; i < = (x - 1) / 2; i++) { for ( int j = 1; j < = p; j++) { cout < < " " ; }if (i % 2 != 0) printx(s); else printo(s); cout < < endl; p++; for ( int j = 1; j < = p; j++) cout < < " " ; if (i % 2 != 0) printx(s); else printo(s); cout < < endl; p--; s++; }// extra upper middle for even if (n % 2 == 0) { for ( int i = 1; i < = p; i++) cout < < " " ; if (n % 4 != 0) printx(n / 2); else printo(n / 2); cout < < endl; }// middle line if (n % 2 != 0) printx(n); else { if (n % 4 != 0) { printx(n / 2); printx(n / 2); } else { printx(n / 2); printo(n / 2); } }cout < < endl; // extra lower middle for even if (n % 2 == 0) { cout < < " " ; printx(n / 2); cout < < endl; }// lower half p = 1; if (n % 2 == 0) { x--; p = 2; }int q = x / 2; // one line for each iteration for ( int i = 1; i < = x; i++) { for ( int j = 1; j < = p; j++) cout < < " " ; printx(q); if (i % 2 == 0) q--; cout < < endl; p++; }cout < < endl; }// Driver code int main() { int n = 7; printPattern(n); n = 8; printPattern(n); return 0; }

Java
// java program to Print symmetric // double triangle pattern class GFG {// print alternate x o beginning with x static void printx( int n) { for ( int i = 1 ; i < = n; i++) { if (i % 2 != 0 ) System.out.print( "x " ); else System.out.print( "o " ); } return ; }// print alternate x o beginning with o static void printo( int n) { for ( int i = 1 ; i < = n; i++) { if (i % 2 != 0 ) System.out.print( "o " ); else System.out.print( "x " ); } return ; }// print the pattern for n static void printPattern( int n) { // upper half n-1 lines for // odd, n-2 lines for even int x = n; if (n % 2 == 0 ) x = x - 1 ; // number of spaces to leave in each line int p = n - 1 ; // number of characters in each line int s = 1 ; // prints double lines in each iteration for ( int i = 1 ; i < = (x - 1 ) / 2 ; i++) { for ( int j = 1 ; j < = p; j++) { System.out.print( " " ); }if (i % 2 != 0 ) printx(s); else printo(s); System.out.println(); p++; for ( int j = 1 ; j < = p; j++) System.out.print( " " ); if (i % 2 != 0 ) printx(s); else printo(s); System.out.println(); p--; s++; }// extra upper middle for even if (n % 2 == 0 ) { for ( int i = 1 ; i < = p; i++) System.out.print( " " ); if (n % 4 != 0 ) printx(n / 2 ); else printo(n / 2 ); System.out.println(); }// middle line if (n % 2 != 0 ) printx(n); else { if (n % 4 != 0 ) { printx(n / 2 ); printx(n / 2 ); } else { printx(n / 2 ); printo(n / 2 ); } }System.out.println(); // extra lower middle for even if (n % 2 == 0 ) { System.out.print( " " ); printx(n / 2 ); System.out.println(); }// lower half p = 1 ; if (n % 2 == 0 ) { x--; p = 2 ; }int q = x / 2 ; // one line for each iteration for ( int i = 1 ; i < = x; i++) { for ( int j = 1 ; j < = p; j++) System.out.print( " " ); printx(q); if (i % 2 == 0 ) q--; System.out.println(); p++; }System.out.println(); } // Driver code public static void main (String[] args) { int n = 7 ; printPattern(n); n = 8 ; printPattern(n); } }// This code is contributed by Anant Agarwal.

Python3
# Python3 program to Print symmetric # double triangle pattern# Print alternate x o beginning with x def printx(n):for i in range ( 1 , n + 1 ): if (i % 2 ! = 0 ): print ( "x " , end = "") else : print ( "o " , end = "")return# Print alternate x o beginning with o def printo(n):for i in range ( 1 , n + 1 ): if (i % 2 ! = 0 ): print ( "o " , end = "") else : print ( "x " , end = "")return# Print the pattern for n def printPattern(n):# upper half # n-1 lines for odd, # n-2 lines for even x = nif (n % 2 = = 0 ): x = x - 1# number of spaces to leave # in each line p = n - 1# number of characters in each line s = 1# prints double lines in each iteration for i in range ( 1 , (x - 1 ) / / 2 + 1 ): for j in range ( 1 , p + 1 ): print ( " " , end = "")if (i % 2 ! = 0 ): printx(s) else : printo(s)print () p + = 1for j in range ( 1 , p + 1 ): print ( " " , end = "")if (i % 2 ! = 0 ): printx(s) else : printo(s)print ()p - = 1 s + = 1# extra upper middle for even if (n % 2 = = 0 ): for i in range ( 1 , p + 1 ): print ( " " , end = "")if (n % 4 ! = 0 ): printx(n / / 2 ) else : printo(n / / 2 )print ()# middle line if (n % 2 ! = 0 ): printx(n) else : if (n % 4 ! = 0 ): printx(n / / 2 ) printx(n / / 2 ) else : printx(n / / 2 ) printo(n / / 2 )print ()# extra lower middle for even if (n % 2 = = 0 ): print ( " " , end = "") printx(n / / 2 ) print ()# lower half p = 1if (n % 2 = = 0 ): x - = 1 p = 2q = x / / 2# one line for each iteration for i in range ( 1 , x + 1 ): for j in range ( 1 , p + 1 ): print ( " " , end = "")printx(q)if (i % 2 = = 0 ): q - = 1print ()p + = 1print ()# Driver code n = 7 printPattern(n) n = 8 printPattern(n)# This code is contributed by mohit kumar

C#
// C# program to Print symmetric // double triangle pattern using System; class GFG {// print alternate x o beginning with x static void printx(int n) { for (int i = 1; i < = n; i++) { if (i % 2 != 0) Console.Write("x "); else Console.Write("o "); } return; }// print alternate x o beginning with o static void printo(int n) { for (int i = 1; i < = n; i++) { if (i % 2 != 0) Console.Write("o "); else Console.Write("x "); } return; }// print the pattern for n static void printPattern(int n) { // upper half n-1 lines for // odd, n-2 lines for even int x = n; if (n % 2 == 0) x = x - 1; // number of spaces to leave in each line int p = n - 1; // number of characters in each line int s = 1; // prints double lines in each iteration for (int i = 1; i < = (x - 1) / 2; i++) { for (int j = 1; j < = p; j++) { Console.Write(" "); }if (i % 2 != 0) printx(s); else printo(s); Console.WriteLine(); p++; for (int j = 1; j < = p; j++) Console.Write(" "); if (i % 2 != 0) printx(s); else printo(s); Console.WriteLine(); p--; s++; }// extra upper middle for even if (n % 2 == 0) { for (int i = 1; i < = p; i++) Console.Write(" "); if (n % 4 != 0) printx(n / 2); else printo(n / 2); Console.WriteLine(); }// middle line if (n % 2 != 0) printx(n); else { if (n % 4 != 0) { printx(n / 2); printx(n / 2); } else { printx(n / 2); printo(n / 2); } }Console.WriteLine(); // extra lower middle for even if (n % 2 == 0) { Console.Write(" "); printx(n / 2); Console.WriteLine(); }// lower half p = 1; if (n % 2 == 0) { x--; p = 2; }int q = x / 2; // one line for each iteration for (int i = 1; i < = x; i++) { for (int j = 1; j < = p; j++) Console.Write(" "); printx(q); if (i % 2 == 0) q--; Console.WriteLine(); p++; }Console.WriteLine(); } // Driver code public static void Main () { int n = 7; printPattern(n); n = 8; printPattern(n); } }// This code is contributed by vt_m.

的PHP
< ?php // PHP program to Print symmetric // double triangle pattern// print alternate x o // beginning with x function printx( $n ) { for ( $i = 1; $i < = $n ; $i ++) { if ( $i % 2 != 0) echo "x " ; else echo "o " ; } return ; }// print alternate x o // beginning with o function printo( $n ) { for ( $i = 1; $i < = $n ; $i ++) { if ( $i % 2 != 0) echo "o " ; else echo "x " ; } }// print the pattern for n function printPattern( $n ) { // upper half // n-1 lines for odd, // n-2 lines for even $x = $n ; if ( $n % 2 == 0) $x = $x - 1; // number of spaces to // leave in each line $p = $n - 1; // number of characters // in each line $s = 1; // prints double lines // in each iteration for ( $i = 1; $i < = ( $x - 1) / 2; $i ++) { for ( $j = 1; $j < = $p ; $j ++) { echo " " ; }if ( $i % 2 != 0) printx( $s ); else printo( $s ); echo "\n" ; $p ++; for ( $j = 1; $j < = $p ; $j ++) echo " " ; if ( $i % 2 != 0) printx( $s ); else printo( $s ); echo "\n" ; $p --; $s ++; }// extra upper middle // for even if ( $n % 2 == 0) { for ( $i = 1; $i < = $p ; $i ++) echo " " ; if ( $n % 4 != 0) printx( $n / 2); else printo( $n / 2); echo "\n" ; }// middle line if ( $n % 2 != 0) printx( $n ); else { if ( $n % 4 != 0) { printx( $n / 2); printx( $n / 2); } else { printx( $n / 2); printo( $n / 2); } }echo "\n" ; // extra lower middle for even if ( $n % 2 == 0) { echo " " ; printx( $n / 2); echo "\n" ; }// lower half $p = 1; if ( $n % 2 == 0) { $x --; $p = 2; }$q = floor ( $x / 2); // one line for each iteration for ( $i = 1; $i < = $x ; $i ++) { for ( $j = 1; $j < = $p ; $j ++) echo " " ; printx( $q ); if ( $i % 2 == 0) $q --; echo "\n" ; $p ++; }echo "\n" ; }// Driver code $n = 7; printPattern( $n ); $n = 8; printPattern( $n ); // This code is contributed by mits ?>

输出如下:
x x o x o x x o x x o x x o x o x o x x o x x o x x o x o x x x x o x o x x o x x o x o x o x x o x o o x o x x o x o x o x x o x x o x o x x

【算法设计(打印对称双三角图案)】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

    推荐阅读