# 算法设计：打印对称双三角图案

2021年3月11日18:01:21 发表评论 362 次浏览

## 本文概述

Input : n = 1
Output : x

Input : n = 2
Output :
x
x x
x

Input: n = 5
Output:
x
x
o x
o x
x o x o x
x o
x o
x
x

Input: n = 6
Output:
x
x
o x
o x
x o x
x o x x o x
x o x
x o
x o
x
x

Input : 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行。

## 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 = 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 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 + = 1

for 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 = 1

if (n % 2 = = 0 ):
x - = 1
p = 2

q = 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 - = 1

print ()

p + = 1

print ()

# 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