Skip to main content

Split array in three equal sum subarrays

Here given code implementation process.

/*
   C Program for
   Split array in three equal sum subarrays
*/
#include <stdio.h>

//Splitting an array into three sum subarrays
void splitEqualSum(int arr[], int n)
{
	int status = 1;
	if (n < 3)
	{
		status = 0;
	}
	else
	{
		int sum = 0;
		int auxiliary = 0;
		// Loop controlling variables
		int i = 0;
		int j = 0;
		// Calculate sum of all elements
		for (i = 0; i < n; ++i)
		{
			sum += arr[i];
		}
		int point[2];
		point[0] = -1;
		point[1] = -1;
		if (sum % 3 == 0)
		{
			// Find that three equal subarray exists in given array
			for (i = 0; i < n && j < 2; ++i)
			{
				// Add current element into auxiliary variable
				auxiliary += arr[i];
				if (auxiliary == sum / 3)
				{
					point[j] = i + 1;
					auxiliary = 0;
					j++;
				}
			}
			if (j == 2)
			{
				// When equal three subarray exist
				j = 0;
				// Print the elements of subarray 
				for (i = 0; i < n; ++i)
				{
					if (j < 2 && point[j] == i)
					{
						printf("\n");
						j++;
					}
					printf(" %d", arr[i]);
				}
			}
			else
			{
				// When not possible to split array into three equal sum
				status = 0;
			}
		}
		else
		{
			status = 0;
		}
	}
	if (status != 1)
	{
		printf("\n Three subarray with equal sum are not possible \n");
	}
}
int main()
{
	int arr[] = {
		5 , 2 , 7 , -5 , 7 , -1 , 3 , 4 , 5
	};
	// Get the size
	int n = sizeof(arr) / sizeof(arr[0]);
	splitEqualSum(arr, n);
	return 0;
}

Output

 5 2 7 -5
 7 -1 3
 4 5
/*
    Java Program for
    Split array in three equal sum subarrays
*/
public class Partition
{
	// Splitting an array into three sum subarrays
	public void splitEqualSum(int[] arr, int n)
	{
		boolean status = true;
		if (n < 3)
		{
			status = false;
		}
		else
		{
			int sum = 0;
			int auxiliary = 0;
			// Loop controlling variables
			int i = 0;
			int j = 0;
			// Calculate sum of all elements
			for (i = 0; i < n; ++i)
			{
				sum += arr[i];
			}
			int[] point = new int[2];
			point[0] = -1;
			point[1] = -1;
			if (sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				for (i = 0; i < n && j < 2; ++i)
				{
					// Add current element into auxiliary variable
					auxiliary += arr[i];
					if (auxiliary == sum / 3)
					{
						point[j] = i + 1;
                      	// Set zero sum
						auxiliary = 0;
						j++;
					}
				}
				if (j == 2)
				{
					// When equal three subarray exist
					j = 0;
					// Print the elements of subarray 
					for (i = 0; i < n; ++i)
					{
						if (j < 2 && point[j] == i)
						{
							System.out.print("\n");
							j++;
						}
						System.out.print(" " + arr[i]);
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					status = false;
				}
			}
			else
			{
				status = false;
			}
		}
		if (status != true)
		{
			System.out.print("\n Three subarray with equal sum are not possible \n");
		}
	}
	public static void main(String[] args)
	{
		Partition task = new Partition();
		int []arr = {
			5 , 2 , 7 , -5 , 7 , -1 , 3 , 4 , 5
		};
		// Get the size
		int n = arr.length;
		task.splitEqualSum(arr, n);
	}
}

Output

 5 2 7 -5
 7 -1 3
 4 5
// Include header file
#include <iostream>

using namespace std;
/*
    C++ Program for
    Split array in three equal sum subarrays
*/
class Partition
{
	public:
		// Splitting an array into three sum subarrays
		void splitEqualSum(int arr[], int n)
		{
			bool status = true;
			if (n < 3)
			{
				status = false;
			}
			else
			{
				int sum = 0;
				int auxiliary = 0;
				// Loop controlling variables
				int i = 0;
				int j = 0;
				// Calculate sum of all elements
				for (i = 0; i < n; ++i)
				{
					sum += arr[i];
				}
				int point[2];
				point[0] = -1;
				point[1] = -1;
				if (sum % 3 == 0)
				{
					// Find that three equal subarray exists in given array
					for (i = 0; i < n && j < 2; ++i)
					{
						// Add current element into auxiliary variable
						auxiliary += arr[i];
						if (auxiliary == sum / 3)
						{
							point[j] = i + 1;
							// Set zero sum
							auxiliary = 0;
							j++;
						}
					}
					if (j == 2)
					{
						// When equal three subarray exist
						j = 0;
						// Print the elements of subarray
						for (i = 0; i < n; ++i)
						{
							if (j < 2 && point[j] == i)
							{
								cout << "\n";
								j++;
							}
							cout << " " << arr[i];
						}
					}
					else
					{
						// When not possible to split array into three equal sum
						status = false;
					}
				}
				else
				{
					status = false;
				}
			}
			if (status != true)
			{
				cout << "\n Three subarray with equal sum are not possible \n";
			}
		}
};
int main()
{
	Partition task = Partition();
	int arr[] = {
		5 , 2 , 7 , -5 , 7 , -1 , 3 , 4 , 5
	};
	// Get the size
	int n = sizeof(arr) / sizeof(arr[0]);
	task.splitEqualSum(arr, n);
	return 0;
}

Output

 5 2 7 -5
 7 -1 3
 4 5
// Include namespace system
using System;
/*
    C# Program for
    Split array in three equal sum subarrays
*/
public class Partition
{
	// Splitting an array into three sum subarrays
	public void splitEqualSum(int[] arr, int n)
	{
		Boolean status = true;
		if (n < 3)
		{
			status = false;
		}
		else
		{
			int sum = 0;
			int auxiliary = 0;
			// Loop controlling variables
			int i = 0;
			int j = 0;
			// Calculate sum of all elements
			for (i = 0; i < n; ++i)
			{
				sum += arr[i];
			}
			int[] point = new int[2];
			point[0] = -1;
			point[1] = -1;
			if (sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				for (i = 0; i < n && j < 2; ++i)
				{
					// Add current element into auxiliary variable
					auxiliary += arr[i];
					if (auxiliary == sum / 3)
					{
						point[j] = i + 1;
						// Set zero sum
						auxiliary = 0;
						j++;
					}
				}
				if (j == 2)
				{
					// When equal three subarray exist
					j = 0;
					// Print the elements of subarray
					for (i = 0; i < n; ++i)
					{
						if (j < 2 && point[j] == i)
						{
							Console.Write("\n");
							j++;
						}
						Console.Write(" " + arr[i]);
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					status = false;
				}
			}
			else
			{
				status = false;
			}
		}
		if (status != true)
		{
			Console.Write("\n Three subarray with equal sum are not possible \n");
		}
	}
	public static void Main(String[] args)
	{
		Partition task = new Partition();
		int[] arr = {
			5 , 2 , 7 , -5 , 7 , -1 , 3 , 4 , 5
		};
		// Get the size
		int n = arr.Length;
		task.splitEqualSum(arr, n);
	}
}

Output

 5 2 7 -5
 7 -1 3
 4 5
<?php
/*
    Php Program for
    Split array in three equal sum subarrays
*/
class Partition
{
	// Splitting an array into three sum subarrays
	public	function splitEqualSum( & $arr, $n)
	{
		$status = true;
		if ($n < 3)
		{
			$status = false;
		}
		else
		{
			$sum = 0;
			$auxiliary = 0;
			// Loop controlling variables
			$i = 0;
			$j = 0;
			// Calculate sum of all elements
			for ($i = 0; $i < $n; ++$i)
			{
				$sum += $arr[$i];
			}
			$point = array_fill(0, 2, 0);
			if ($sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				for ($i = 0; $i < $n && $j < 2; ++$i)
				{
					// Add current element into auxiliary variable
					$auxiliary += $arr[$i];
					if ($auxiliary == intval($sum / 3))
					{
						$point[$j] = $i + 1;
						// Set zero sum
						$auxiliary = 0;
						$j++;
					}
				}
				if ($j == 2)
				{
					// When equal three subarray exist
					$j = 0;
					// Print the elements of subarray
					for ($i = 0; $i < $n; ++$i)
					{
						if ($j < 2 && $point[$j] == $i)
						{
							echo "\n";
							$j++;
						}
						echo " ". $arr[$i];
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					$status = false;
				}
			}
			else
			{
				$status = false;
			}
		}
		if ($status != true)
		{
			echo "\n Three subarray with equal sum are not possible \n";
		}
	}
}

function main()
{
	$task = new Partition();
	$arr = array(5, 2, 7, -5, 7, -1, 3, 4, 5);
	// Get the size
	$n = count($arr);
	$task->splitEqualSum($arr, $n);
}
main();

Output

 5 2 7 -5
 7 -1 3
 4 5
/*
    Node Js Program for
    Split array in three equal sum subarrays
*/
class Partition
{
	// Splitting an array into three sum subarrays
	splitEqualSum(arr, n)
	{
		var status = true;
		if (n < 3)
		{
			status = false;
		}
		else
		{
			var sum = 0;
			var auxiliary = 0;
			// Loop controlling variables
			var i = 0;
			var j = 0;
			// Calculate sum of all elements
			for (i = 0; i < n; ++i)
			{
				sum += arr[i];
			}
			var point = Array(2).fill(0);
			if (sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				for (i = 0; i < n && j < 2; ++i)
				{
					// Add current element into auxiliary variable
					auxiliary += arr[i];
					if (auxiliary == parseInt(sum / 3))
					{
						point[j] = i + 1;
						// Set zero sum
						auxiliary = 0;
						j++;
					}
				}
				if (j == 2)
				{
					// When equal three subarray exist
					j = 0;
					// Print the elements of subarray
					for (i = 0; i < n; ++i)
					{
						if (j < 2 && point[j] == i)
						{
							process.stdout.write("\n");
							j++;
						}
						process.stdout.write(" " + arr[i]);
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					status = false;
				}
			}
			else
			{
				status = false;
			}
		}
		if (status != true)
		{
			process.stdout.write("\n Three subarray with equal sum are not possible \n");
		}
	}
}

function main()
{
	var task = new Partition();
	var arr = [5, 2, 7, -5, 7, -1, 3, 4, 5];
	// Get the size
	var n = arr.length;
	task.splitEqualSum(arr, n);
}
main();

Output

 5 2 7 -5
 7 -1 3
 4 5
#  Python 3 Program for
#  Split array in three equal sum subarrays

class Partition :
	#  Splitting an array into three sum subarrays
	def splitEqualSum(self, arr, n) :
		status = True
		if (n < 3) :
			status = False
		else :
			sum = 0
			auxiliary = 0
			#  Loop controlling variables
			i = 0
			j = 0
			#  Calculate sum of all elements
			while (i < n) :
				sum += arr[i]
				i += 1
			
			point = [0] * (2)
			if (sum % 3 == 0) :
				#  Find that three equal subarray exists in given array
				i = 0
				while (i < n and j < 2) :
					#  Add current element into auxiliary variable
					auxiliary += arr[i]
					if (auxiliary == int(sum / 3)) :
						point[j] = i + 1
						#  Set zero sum
						auxiliary = 0
						j += 1
					
					i += 1
				
				if (j == 2) :
					#  When equal three subarray exist
					j = 0
					#  Print the elements of subarray
					i = 0
					while (i < n) :
						if (j < 2 and point[j] == i) :
							print(end = "\n")
							j += 1
						
						print(" ", arr[i], end = "")
						i += 1
					
				else :
					#  When not possible to split array into three equal sum
					status = False
				
			else :
				status = False
			
		
		if (status != True) :
			print("\n Three subarray with equal sum are not possible ")
		
	

def main() :
	task = Partition()
	arr = [5, 2, 7, -5, 7, -1, 3, 4, 5]
	#  Get the size
	n = len(arr)
	task.splitEqualSum(arr, n)

if __name__ == "__main__": main()

Output

  5  2  7  -5
  7  -1  3
  4  5
#  Ruby Program for
#  Split array in three equal sum subarrays

class Partition 
	#  Splitting an array into three sum subarrays
	def splitEqualSum(arr, n) 
		status = true
		if (n < 3) 
			status = false
		else 
			sum = 0
			auxiliary = 0
			#  Loop controlling variables
			i = 0
			j = 0
			#  Calculate sum of all elements
			while (i < n) 
				sum += arr[i]
				i += 1
			end

			point = Array.new(2) {0}
			if (sum % 3 == 0) 
				#  Find that three equal subarray exists in given array
				i = 0
				while (i < n && j < 2) 
					#  Add current element into auxiliary variable
					auxiliary += arr[i]
					if (auxiliary == sum / 3) 
						point[j] = i + 1
						#  Set zero sum
						auxiliary = 0
						j += 1
					end

					i += 1
				end

				if (j == 2) 
					#  When equal three subarray exist
					j = 0
					#  Print the elements of subarray
					i = 0
					while (i < n) 
						if (j < 2 && point[j] == i) 
							print("\n")
							j += 1
						end

						print(" ", arr[i])
						i += 1
					end

				else 
					#  When not possible to split array into three equal sum
					status = false
				end

			else 
				status = false
			end

		end

		if (status != true) 
			print("\n Three subarray with equal sum are not possible \n")
		end

	end

end

def main() 
	task = Partition.new()
	arr = [5, 2, 7, -5, 7, -1, 3, 4, 5]
	#  Get the size
	n = arr.length
	task.splitEqualSum(arr, n)
end

main()

Output

 5 2 7 -5
 7 -1 3
 4 5
/*
    Scala Program for
    Split array in three equal sum subarrays
*/
class Partition
{
	// Splitting an array into three sum subarrays
	def splitEqualSum(arr: Array[Int], n: Int): Unit = {
		var status: Boolean = true;
		if (n < 3)
		{
			status = false;
		}
		else
		{
			var sum: Int = 0;
			var auxiliary: Int = 0;
			// Loop controlling variables
			var i: Int = 0;
			var j: Int = 0;
			// Calculate sum of all elements
			while (i < n)
			{
				sum += arr(i);
				i += 1;
			}
			var point: Array[Int] = Array.fill[Int](2)(0);
			if (sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				i = 0;
				while (i < n && j < 2)
				{
					// Add current element into auxiliary variable
					auxiliary += arr(i);
					if (auxiliary == (sum / 3).toInt)
					{
						point(j) = i + 1;
						// Set zero sum
						auxiliary = 0;
						j += 1;
					}
					i += 1;
				}
				if (j == 2)
				{
					// When equal three subarray exist
					j = 0;
					// Print the elements of subarray
					i = 0;
					while (i < n)
					{
						if (j < 2 && point(j) == i)
						{
							print("\n");
							j += 1;
						}
						print(" " + arr(i));
						i += 1;
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					status = false;
				}
			}
			else
			{
				status = false;
			}
		}
		if (status != true)
		{
			print("\n Three subarray with equal sum are not possible \n");
		}
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		var task: Partition = new Partition();
		var arr: Array[Int] = Array(5, 2, 7, -5, 7, -1, 3, 4, 5);
		// Get the size
		var n: Int = arr.length;
		task.splitEqualSum(arr, n);
	}
}

Output

 5 2 7 -5
 7 -1 3
 4 5
/*
    Swift 4 Program for
    Split array in three equal sum subarrays
*/
class Partition
{
	// Splitting an array into three sum subarrays
	func splitEqualSum(_ arr: [Int], _ n: Int)
	{
		var status: Bool = true;
		if (n < 3)
		{
			status = false;
		}
		else
		{
			var sum: Int = 0;
			var auxiliary: Int = 0;
			// Loop controlling variables
			var i: Int = 0;
			var j: Int = 0;
			// Calculate sum of all elements
			while (i < n)
			{
				sum += arr[i];
				i += 1;
			}
			var point: [Int] = Array(repeating: 0, count: 2);
			if (sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				i = 0;
				while (i < n && j < 2)
				{
					// Add current element into auxiliary variable
					auxiliary += arr[i];
					if (auxiliary == sum / 3)
					{
						point[j] = i + 1;
						// Set zero sum
						auxiliary = 0;
						j += 1;
					}
					i += 1;
				}
				if (j == 2)
				{
					// When equal three subarray exist
					j = 0;
					// Print the elements of subarray
					i = 0;
					while (i < n)
					{
						if (j < 2 && point[j] == i)
						{
							print(terminator: "\n");
							j += 1;
						}
						print(" ", arr[i], terminator: "");
						i += 1;
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					status = false;
				}
			}
			else
			{
				status = false;
			}
		}
		if (status  != true)
		{
			print("\n Three subarray with equal sum are not possible ");
		}
	}
}
func main()
{
	let task: Partition = Partition();
	let arr: [Int] = [5, 2, 7, -5, 7, -1, 3, 4, 5];
	// Get the size
	let n: Int = arr.count;
	task.splitEqualSum(arr, n);
}
main();

Output

  5  2  7  -5
  7  -1  3
  4  5
/*
    Kotlin Program for
    Split array in three equal sum subarrays
*/
class Partition
{
	// Splitting an array into three sum subarrays
	fun splitEqualSum(arr: Array < Int > , n: Int): Unit
	{
		var status: Boolean = true;
		if (n < 3)
		{
			status = false;
		}
		else
		{
			var sum: Int = 0;
			var auxiliary: Int = 0;
			// Loop controlling variables
			var i: Int = 0;
			var j: Int = 0;
			// Calculate sum of all elements
			while (i < n)
			{
				sum += arr[i];
				i += 1;
			}
			var point: Array < Int > = Array(2)
			{
				0
			};
			if (sum % 3 == 0)
			{
				// Find that three equal subarray exists in given array
				i = 0;
				while (i < n && j < 2)
				{
					// Add current element into auxiliary variable
					auxiliary += arr[i];
					if (auxiliary == sum / 3)
					{
						point[j] = i + 1;
						// Set zero sum
						auxiliary = 0;
						j += 1;
					}
					i += 1;
				}
				if (j == 2)
				{
					// When equal three subarray exist
					j = 0;
					// Print the elements of subarray
					i = 0;
					while (i < n)
					{
						if (j < 2 && point[j] == i)
						{
							print("\n");
							j += 1;
						}
						print(" " + arr[i]);
						i += 1;
					}
				}
				else
				{
					// When not possible to split array into three equal sum
					status = false;
				}
			}
			else
			{
				status = false;
			}
		}
		if (status != true)
		{
			print("\n Three subarray with equal sum are not possible \n");
		}
	}
}
fun main(args: Array < String > ): Unit
{
	var task: Partition = Partition();
	var arr: Array < Int > = arrayOf(5, 2, 7, -5, 7, -1, 3, 4, 5);
	// Get the size
	var n: Int = arr.count();
	task.splitEqualSum(arr, n);
}

Output

 5 2 7 -5
 7 -1 3
 4 5




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment