Given a value n, we need to print the following pattern accordingly, using only constant extra space.
Examples:
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
We can divide this problem into 3 parts:
1) Print upper half with n-1 lines for odd n or n-2 lines for even n.
2) Print middle lines, 1 line for odd n or 3 lines for even n.
3) Print lower half, with n-1 lines for odd n or n-2 lines for even n.
For such complex patterns it may be easier if we can use 1-based indexing
and separate functions to print characters beginning with x or o.
// 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 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 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 |
<script> // JavaScript program to Print symmetric
// double triangle pattern
// print alternate x o beginning with x
function printx(n) {
for ( var i = 1; i <= n; i++) {
if (i % 2 !== 0) document.write( "x " );
else document.write( "o " );
}
return ;
}
// print alternate x o beginning with o
function printo(n) {
for ( var i = 1; i <= n; i++) {
if (i % 2 !== 0) document.write( "o " );
else document.write( "x " );
}
return ;
}
// print the pattern for n
function printPattern(n) {
// upper half n-1 lines for
// odd, n-2 lines for even
var x = n;
if (n % 2 === 0) x = x - 1;
// number of spaces to leave in each line
var p = n - 1;
// number of characters in each line
var s = 1;
// prints double lines in each iteration
for ( var i = 1; i <= (x - 1) / 2; i++) {
for ( var j = 1; j <= p; j++) {
document.write( " " );
}
if (i % 2 !== 0) printx(s);
else printo(s);
document.write( "<br>" );
p++;
for ( var j = 1; j <= p; j++) document.write( " " );
if (i % 2 != 0) printx(s);
else printo(s);
document.write( "<br>" );
p--;
s++;
}
// extra upper middle for even
if (n % 2 === 0) {
for ( var i = 1; i <= p; i++) document.write( " " );
if (n % 4 !== 0) printx(n / 2);
else printo(n / 2);
document.write( "<br>" );
}
// 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);
}
}
document.write( "<br>" );
// extra lower middle for even
if (n % 2 === 0) {
document.write( " " );
printx(n / 2);
document.write( "<br>" );
}
// lower half
p = 1;
if (n % 2 === 0) {
x--;
p = 2;
}
var q = x / 2;
// one line for each iteration
for ( var i = 1; i <= x; i++) {
for ( var j = 1; j <= p; j++) document.write( " " );
printx(q);
if (i % 2 === 0) q--;
document.write( "<br>" );
p++;
}
document.write( "<br>" );
}
// Driver code
var n = 7;
printPattern(n);
n = 8;
printPattern(n);
</script>
|
// c# equivalent of above java code 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 (String[] args)
{
int n = 7;
PrintPattern(n);
n = 8;
PrintPattern(n);
}
} |
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 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
Time Complexity:
Auxiliary Space: O(1) because it is using constant space for variables