 
  Data Structure Data Structure
 Networking Networking
 RDBMS RDBMS
 Operating System Operating System
 Java Java
 MS Excel MS Excel
 iOS iOS
 HTML HTML
 CSS CSS
 Android Android
 Python Python
 C Programming C Programming
 C++ C++
 C# C#
 MongoDB MongoDB
 MySQL MySQL
 Javascript Javascript
 PHP PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count all triplets whose sum is equal to a perfect cube in C++
We are given with an array of n integers and the task is to calculate the count all the triplets whose sum is equal to perfect cube
What is the perfect cube
A perfect cube is a number which is a cube of any number, like 125 is a cube of 5 so we can say that 125 is a perfect cube. Some of the perfect cube integers are 1, 8, 27, 64, 125….
So, according to the problem in the array we have to find and count those triplets (set of 3 values) whose sum is equal to a perfect cube number. Moreover the condition provided the sum of the triplet be at most 15000 so there can be only 24 cubes are possible. So we will be using a Dynamic programming approach to solve the problem in less complexity.
For Example
Input− array[] = { 5, 2, 18, 6, 3 }; Output − Number of Triplets are= 1 Explanation − 18+6+3 = 27 (is a perfect cube) Except this no other triplet is a perfect cube. Input − array[] = {1, 2, 3, 4, 5}; Output − Number of Triplets are= 2 Explanation − 1 + 2 + 5 = 8 (is a perfect cube) 1 + 3 + 4 = 8 (is a perfect cube) Approach used in the below program is as follows
- Input the array of positive integers 
- Calculate its size 
- Using dynamic programming we will find the occurence of the digits in the array. 
- Initialise the variable ans to store the count of number of triplets. 
- Traverse and find the third occurence of the triplet’s set and find whether it is a perfect cube. If the triplet is a perfect cube, increment the value of ans by 1. 
- Return the ans. 
Example
#include <bits/stdc++.h> using namespace std; int arrd[1001][15001]; // Function to find the occurence of a number // in the given range void compute(int ar[], int num){    for (int i = 0; i < num; ++i) {       for (int j = 1; j <= 15000; ++j) {          // if i == 0          // assign 1 to present value          if (i == 0)          arrd[i][j] = (j == ar[i]);          // else add +1 to current state with          // previous state          else          arrd[i][j] = arrd[i - 1][j] + (ar[i] == j);       }    } } // Function to count the triplets whose sum // is a perfect cube int countTriplets(int ar[], int num){    compute(ar, num);    int ans = 0; // Initialize answer    for (int i = 0; i < num - 2; ++i) {       for (int j = i + 1; j < num - 1; ++j) {          for (int k = 1; k <= 24; ++k) {             int cube = k * k * k;             int rem = cube - (ar[i] + ar[j]);             // count all occurrence of third triplet             // in range from j+1 to n             if (rem > 0)             ans += arrd[num - 1][rem] - arrd[j][rem];          }       }    }    return ans; } // main function code int main(){    int ar[] = { 5, 2, 18, 6, 3 };    int num = sizeof(ar) / sizeof(ar[0]);    cout << “Number of Triplets are= ”<<countTriplets(ar, num);    return 0; } Output
If we run the above code it will generate the following output −
Number of Triplets are= 1
