Program to print Sum Triangle for a given array

Given a array, write a program to construct a triangle where last row contains elements of given array, every element of second last row contains sum of below two elements and so on.

Example:

Input: arr[] = {4, 7, 3, 6, 7};
Output:
81
40 41
21 19 22
11 10 9 13
4 7 3 6 7 

Input: {10, 40, 50}
Output:
140
50 90
10 40 50

An important observation about output is final value is at the top and top element needs to printed first. Therefore, we use a 2D auxiliary array to construct the triangle in bottom up manner and then print the trianle. An element tri[i][j] of 2D array can be calculated as sum of tri[i+1][j] and tri[i+1][j+1].

Below is C++ and Java implemenation of above approach.

C++

// C++ program to print sum triangle for a given array
#include <bits/stdc++.h>
using namespace std;

// prints sum triangle for arr[0..n-1]
void printTriangle(int arr[], int n)
{
    // Initialize a 2D array to store triangle
    int tri[n][n];
    memset(tri, 0, sizeof(tri));

    // Initialize last row of triangle
    for (int i = 0; i < n ; i++)
        tri[n-1][i] = arr[i];

    // Fill other rows
    for (int i = n-2; i >=0; i--)
      for (int j = 0; j <= i; j++)
        tri[i][j] = tri[i+1][j] + tri[i+1][j+1];

    // Print the triangle
    for (int i = 0; i < n; i++)
    {
        for(int j = 0; j <= i ; j++)
            cout << tri[i][j]<<" ";
        cout << endl;
    }
}

// Driver Program
int main()
{
    int arr[] = {4, 7, 3, 6, 7};
    int n = sizeof(arr)/sizeof(arr[0]);
    printTriangle(arr, n);
    return 0;
}

Java

// Java program to print sum triangle for a given array
class Test{
	 
	 static int arr[] = new int[]{4, 7, 3, 6, 7};
	 
	 // prints sum triangle for arr[0..n-1]
	 public static void printTriangle(int n)
	 {
		// Initialize a 2D array to store triangle
		int tri[][] = new int[n][n];
		 
		// Initialize last row of triangle
	    for (int i = 0; i < n ; i++)
		    tri[n-1][i] = arr[i];
		 
		// Fill other rows
		for (int i = n-2; i >=0; i--)
		    for (int j = 0; j <= i; j++)
		       tri[i][j] = tri[i+1][j] + tri[i+1][j+1];
		 
		// Print the triangle
		for (int i = 0; i < n; i++)
		{
		    for(int j = 0; j <= i ; j++)
		        System.out.print(tri[i][j] + " ");
		    System.out.println();
		}
	 }
	 
	 public static void main(String[] args) 
	 {
		 printTriangle(arr.length);
   	 }
 }


Output:
81
40 41
21 19 22
11 10 9 13
4 7 3 6 7

Thanks to nish for suggesting this solution here.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:







Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.