The Problem
Given an array A[n] of n numbers. You have to compose an array O[N] such that O[i] will be equal to multiplication of all the elements of A[n] except A[i] e.g.
O[0] = A[1] * A[2] * ... * A[n-1] and
O[1] = A[0] * A[2] * ... * A[n-1]
You have to solve the problem without using the division operator and in O(n).
C++ Program
#include <iostream>
#define MAX 5
int main()
{
int arr[MAX] = { 4, 3, 5, 1, 2 };
int product;
int product_of_elems_before[MAX] = {0};
product = 1;
for(int i = 0; i < MAX; ++i)
{
product_of_elems_before[i] = product;
product *= arr[i];
}
int product_of_elems_after[MAX] = {0};
product = 1;
for(int i = MAX - 1; i >= 0; --i)
{
product_of_elems_after[i] = product;
product *= arr[i];
}
for(int i = 0; i < MAX; ++i)
{
arr[i] = product_of_elems_before[i] * product_of_elems_after[i];
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
Java Program
public class ArrayMultiplication
{
public static void main(String args[])
{
int[] arr = new int[]{ 3, 2, 1, 4, 5 };
int product;
int productOfElemsBefore[] = new int[arr.length];
product = 1;
for(int i = 0; i < arr.length; ++i)
{
productOfElemsBefore[i] = product;
product *= arr[i];
}
int productOfElemsAfter[] = new int[arr.length];
product = 1;
for(int i = arr.length - 1; i >= 0; --i)
{
productOfElemsAfter[i] = product;
product *= arr[i];
}
for(int i = 0; i < arr.length; ++i)
{
arr[i] = productOfElemsBefore[i] * productOfElemsAfter[i];
System.out.print(arr[i] + " ");
}
}
}
No comments :
Post a Comment