Given an array of integers, print a sum triangle from it such that the first level has all array elements. From then, at each level number of elements is one less than the previous level and elements at the level is be the Sum of consecutive two elements in the previous level.
Example :
Input : A = {1, 2, 3, 4, 5}
Output : [48]
[20, 28]
[8, 12, 16]
[3, 5, 7, 9]
[1, 2, 3, 4, 5]
Explanation :
Here, [48]
[20, 28] -->(20 + 28 = 48)
[8, 12, 16] -->(8 + 12 = 20, 12 + 16 = 28)
[3, 5, 7, 9] -->(3 + 5 = 8, 5 + 7 = 12, 7 + 9 = 16)
[1, 2, 3, 4, 5] -->(1 + 2 = 3, 2 + 3 = 5, 3 + 4 = 7, 4 + 5 = 9)
Approach :
- Recursion is the key. At each iteration create a new array which contains the Sum of consecutive elements in the array passes as parameter.
- Make a recursive call and pass the newly created array in the previous step.
- While back tracking print the array (for printing in reverse order).
Below is the implementation of the above approach :
C++
#include<bits/stdc++.h>
using namespace std;
void printTriangle( int A[] , int n)
{
if (n < 1)
return ;
int temp[n - 1];
for ( int i = 0; i < n - 1; i++)
{
int x = A[i] + A[i + 1];
temp[i] = x;
}
printTriangle(temp, n - 1);
for ( int i = 0; i < n ; i++)
{
if (i == n - 1)
cout << A[i] << " " ;
else
cout << A[i] << ", " ;
}
cout << endl;
}
int main()
{
int A[] = { 1, 2, 3, 4, 5 };
int n = sizeof (A) / sizeof (A[0]);
printTriangle(A, n);
}
|
Java
import java.util.*;
import java.lang.*;
public class ConstructTriangle
{
public static void printTriangle( int [] A)
{
if (A.length < 1 )
return ;
int [] temp = new int [A.length - 1 ];
for ( int i = 0 ; i < A.length - 1 ; i++)
{
int x = A[i] + A[i + 1 ];
temp[i] = x;
}
printTriangle(temp);
System.out.println(Arrays.toString(A));
}
public static void main(String[] args)
{
int [] A = { 1 , 2 , 3 , 4 , 5 };
printTriangle(A);
}
}
|
Python3
def printTriangle(A):
if ( len (A) < 1 ):
return
temp = [ 0 ] * ( len (A) - 1 )
for i in range ( 0 , len (A) - 1 ):
x = A[i] + A[i + 1 ]
temp[i] = x
printTriangle(temp)
print (A)
A = [ 1 , 2 , 3 , 4 , 5 ]
printTriangle(A)
|
C#
using System;
public class ConstructTriangle
{
static void printTriangle( int []A, int n)
{
if (n < 1)
return ;
int []temp = new int [n - 1];
for ( int i = 0; i < n - 1; i++)
{
int x = A[i] + A[i + 1];
temp[i] = x;
}
printTriangle(temp, n - 1);
for ( int i = 0; i < n ; i++)
{
if (i == n - 1)
Console.Write(A[i] + " " );
else
Console.Write(A[i] + ", " );
}
Console.WriteLine();
}
public static void Main()
{
int [] A = { 1, 2, 3, 4, 5 };
int n = A.Length;
printTriangle(A,n);
}
}
|
PHP
<?php
function printTriangle( $A , $n )
{
if ( $n < 1)
return ;
$temp [ $n - 1] = 0;
for ( $i = 0; $i < $n - 1; $i ++)
{
$x = $A [ $i ] + $A [ $i + 1];
$temp [ $i ] = $x ;
}
printTriangle( $temp , $n - 1);
for ( $i = 0; $i < $n ; $i ++)
{
if ( $i == $n - 1)
echo $A [ $i ] , " " ;
else
echo $A [ $i ] , ", " ;
}
echo "\n" ;
}
$A = array ( 1, 2, 3, 4, 5 );
$n = sizeof( $A );
printTriangle( $A , $n );
?>
|
Javascript
<script>
function printTriangle(A, n)
{
if (n < 1)
return ;
var temp = new Array(n - 1);
for ( var i = 0; i < n - 1; i++)
{
var x = A[i] + A[i + 1];
temp[i] = x;
}
printTriangle(temp, n - 1);
for ( var i = 0; i < n ; i++)
{
if (i == n - 1)
document.write( A[i] + " " );
else
document.write( A[i] + ", " );
}
document.write( "<br>" );
}
var A = [ 1, 2, 3, 4, 5 ];
var n = A.length;
printTriangle(A,n);
</script>
|
Output
48
20, 28
8, 12, 16
3, 5, 7, 9
1, 2, 3, 4, 5
Recursive Approach(Without using For loop inside printTriangle() function) :
Approach :
- At each iteration we created a new array(temp []) in printTriangle() function, Which holds the sum of consecutive elements of input array.
- Now passed newly created array(temp []) in recursive call of printTriangle() function.
- Repeat step 1 and 2 until size of temp[] array is not equal to 1.
C++
#include <bits/stdc++.h>
using namespace std;
int * helper( int temp[], int x[], int index, int n)
{
if (index == n - 1) {
return temp;
}
temp[index] = x[index] + x[index + 1];
return helper(temp, x, index + 1, n);
}
void printTriangle( int x[], int n)
{
if (n == 1) {
return ;
}
int * temp = new int [n - 1];
helper(temp, x, 0, n);
printTriangle(temp, n - 1);
for ( int i = 0; i < n - 1; i++) {
cout << temp[i] << " " ;
}
cout << endl;
}
int main()
{
int x[] = { 1, 2, 3, 4, 5 };
printTriangle(x, 5);
for ( int i = 0; i < 5; i++) {
cout << x[i] << " " ;
}
cout << endl;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
public static void main(String[] args)
{
int [] x = { 1 , 2 , 3 , 4 , 5 };
printTriangle(x);
System.out.println(Arrays.toString(x));
}
static void printTriangle( int [] x)
{
if (x.length == 1 ) {
return ;
}
int [] temp = new int [x.length - 1 ];
helper(temp, x, 0 );
printTriangle(temp);
System.out.println(Arrays.toString(temp));
}
static int [] helper( int [] temp, int [] x, int index)
{
if (index == x.length - 1 ) {
return temp;
}
temp[index] = x[index] + x[index + 1 ];
return helper(temp, x, index + 1 );
}
}
|
Python3
def printTriangle(x):
if ( len (x) = = 1 ):
return
temp = [ 0 ] * ( len (x) - 1 )
helper(temp, x, 0 )
printTriangle(temp)
print (temp)
def helper(temp, x, index):
if (index = = len (x) - 1 ):
return temp
temp[index] = x[index] + x[index + 1 ]
return helper(temp, x, index + 1 )
x = [ 1 , 2 , 3 , 4 , 5 ]
printTriangle(x)
print (x)
|
C#
using System;
using System.Collections.Generic;
public class GFG {
static int [] helper( int [] temp, int [] x, int index,
int n)
{
if (index == n - 1) {
return temp;
}
temp[index] = x[index] + x[index + 1];
return helper(temp, x, index + 1, n);
}
static void printTriangle( int [] x, int n)
{
if (n == 1) {
return ;
}
int [] temp = new int [n - 1];
helper(temp, x, 0, n);
printTriangle(temp, n - 1);
for ( int i = 0; i < n - 1; i++) {
Console.Write(temp[i] + " " );
}
Console.WriteLine( "" );
}
public static void Main( string [] args)
{
int [] x = { 1, 2, 3, 4, 5 };
printTriangle(x, 5);
for ( int i = 0; i < 5; i++)
Console.Write(x[i] + " " );
return ;
}
}
|
Javascript
<script>
function helper( temp, x, index, n)
{
if (index == n - 1) {
return temp;
}
temp[index] = x[index] + x[index + 1];
return helper(temp, x, index + 1, n);
}
function printTriangle( x, n)
{
if (n == 1) {
return ;
}
let temp = [];
for (let i = 0; i < n - 1; i++)
{temp.push(0);}
helper(temp, x, 0, n);
printTriangle(temp, n - 1);
document.write(temp);
}
let x = [1, 2, 3, 4, 5 ];
printTriangle(x, 5);
document.write(x);
</script>
|
Output
[48]
[20, 28]
[8, 12, 16]
[3, 5, 7, 9]
[1, 2, 3, 4, 5]
Last Updated :
16 Nov, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...