Find the maximum product of three numbers in an array?
Eg. 9,5,1,2,3
Max product= 9*5*3= 135
The array can hav negative numbers also..
Answers were Sorted based on User's Feedback
Answer / utkarsh
/*The maximum value of the product fr a set of 3 numbers positiv or negative can be
->either the product of 2 negative numbers( the ones with highest absolut values) and 1(biggest) positive number
->or product of three biggest positive numbers
->zero if all other numbers (except that 0) ar negativ
-> product of smallest 3 negativ number if all numbers are negative
>>>
<you can try it for ANY POSSIBLE VALUES..in th array and see..>
<<<<
*/
procedure
I)
so first IF ARRAY HAS LESS THAN 3 ELEMENTS THROW ERROR
else
sort the numbers in 2 arrays..
neg[]-> with negativ values in descending order
pos[]-> with positive values in descending order
->if there is a zero set a boolean value of a variabl ISZERO as TRUE
II) IF (neg[] has zero or only 1 element) THEN
/* product of the three highest values in pos[] (ie the first three values) is the answer*/
RETURN (pos[0]*pos[1]*pos[2]);
III) ELSE IF pos[] is empty
/*(meaning there are only negative values..multiply the smallest three negative numbers (ie say -1,-2,-3,-4,-5 means multiply -1,-2,-3 you get -6)..that is the answer */
if pos[] is NULL AND if there is a zero then
RETURN ZERO;
else //if pos[] is null and no element is zero then
RETURN neg[neg.length-1]*neg[neg.length-2]*neg[neg.length-3]
/*
//NOTE:
there are only negative values and zeros
highest value is 0
check that too from ISZERO variabl..
*/
IV)ONLY if neg[] array has more than 1 value THEN
multiply th biggest 2 negativ absolute numbers
/*
//(eg {-9,-7,-6,-5 } means...tak -9 and -7..so product is 63)
V) multiply th above result with th highest postiv value from positive array...(ie pos[])
VI) compare this value got in STEP FIVE with product of the three highest values in pos[](ie product of first three values) which ever is greate is the answer
ie
*/
IF (neg[0]*neg[1]*pos[0])>(pos[0]*pos[1]*pos[2]) THEN
RETURN (neg[0]*neg[1]*pos[0])
ELSE RETURN (pos[0]*pos[1]*pos[2])
IT IS VERY EASY TO CODE THIS BECAUSE THE STEPS ARE ALMOST IN PSUEDOCODE....hope it helps...
| Is This Answer Correct ? | 4 Yes | 0 No |
Answer / sathish
Just count the number of -ve symbols in the array before sorting.
CODE:
void main()
{
clrscr();
int i,j,count=0,a[5]={10,2,-7,-5,3};
for(i=0;i<5;i++)
if(a[i]<0)
count=count+1;
if((count%2)==0)
{
for(i=0;i<5;i++)
{
if(a[i]<0)
a[i]=-a[i];
}
}
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
{
if(a[i]<a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
int mul=1;
for(i=0;i<3;i++)
{
mul=mul*a[i];
}
cout<<mul;
getch();
}
| Is This Answer Correct ? | 9 Yes | 8 No |
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int i,j,a[100];
cout<<"Enter the size of array"<<endl;
int n;
cin>>n;
if(n==0)
{
cout<<"invaild!!"<<endl;
exit(1);
}
cout<<"Enter the element for array"<<endl;
for ( i=0;i<n;i++)
cin>>a[i];
int lr=0;
if(n==1)
{
cout<<"only one array is present!!"<<a[0]<<endl;
exit(0);
}
else if(n==2)
{
if(a[0]<a[1])
{
cout<<a[1]<<"largest number";
exit(0);
}
else
{
cout<<a[0]<<"largestn number";
exit(0);
}
}
else if(n==3)
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]*a[j]>lr)
{
lr=a[i]*a[j];
}
}
}
cout<<"max product="<<lr<<endl;
}
else
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(int k=j+1;k<n;k++)
{
if(a[i]*a[j]*a[k]>lr)
{
lr=a[i]*a[j]*a[k];
}
}
}
}
cout<<"max product="<<lr<<endl;
}
return 0 ;
}
/* Ouput
1.
Enter the size of array
5
Enter the element for array
9
5
1
2
3
max product=135
2.
srikanth@srikanth-System-Product-Name:~/c++$ ./a.out
Enter the size of array
5
Enter the element for array
-5
3
1
2
4
max product=24
srikanth@srikanth-System-Product-Name:~/c++$
*/
| Is This Answer Correct ? | 1 Yes | 0 No |
Answer / utkarsh
IF ARRAY HAS LESS THAN 3 ELEMENTS
{
THROW ERROR
}
ELSE
{
sort the numbers in 2 arrays..
neg[]-> with negativ values in descending order
pos[]-> with positive values in descending order
->if there is a zero THEN
set a boolean value of a variabl ISZERO as TRUE
}
IF pos[] is empty
{
IF ISZERO==true THEN
// if there are only negativ values and a zero
RETURN ZERO;
ELSE
// all elements are -ve and no element is zero then
RETURN (neg[neg.length-1]*neg[neg.length-2]*neg[neg.length-3]);
}
IF (neg[] has zero or only 1 element) THEN
{
RETURN (pos[0]*pos[1]*pos[2]);
}
ELSE IF neg[] array has more than 1 value THEN
{
IF (neg[0]*neg[1]*pos[0]) > (pos[0]*pos[1]*pos[2]) THEN
RETURN (neg[0]*neg[1]*pos[0]);
ELSE
RETURN (pos[0]*pos[1]*pos[2]);
}
FOR DETAILS ABT LOGIC READ ABOVE POST
| Is This Answer Correct ? | 1 Yes | 1 No |
Answer / jack
#include"stdafx.h"
#include<iostream>
using namespace std;
void sort(int[],int );
int maxproduct(int ar[],int n);
int main()
{
int arr[]={2,7,9,5,3,6,-12};
cout<<maxproduct(arr,7);
system("calc");
system("pause");
return 0;
}
void sort(int array1[],int n)
{
for(int i=1;i<n;i++)
for(int r=0;r<n-1;r++)
if(array1[r]>array1[r+1])
{
int temp=array1[r];
array1[r]=array1[r+1];
array1[r+1]=temp;
}
}
int maxproduct(int ar[],int n)
{
sort(ar,n);
int max=1;
for(int i=n-1;i>=n-3;i--)
max*=ar[i];
return max;
}
| Is This Answer Correct ? | 1 Yes | 1 No |
Answer / bharghavi
consider the array: 10,2,-7,-5,3
Descending order: 10,3,2,-5,-7
Then ur result will give: 10*3*2=60
But the max. product can be: 10*(-5)*(-7) =350
| Is This Answer Correct ? | 4 Yes | 8 No |
Answer / sathish
1)Sort the array in descending order.
2)Multiply for required number of indices.
CODE:
int mul=1;
for(i=0;i<3;i++)
{
mul=mul*a[i];
}
cout<<mul;
| Is This Answer Correct ? | 11 Yes | 16 No |
write a program using virtual function to find the transposing of a square matrix?
Here's the programm code: int magic(int a, int b) { return b == 0 ? a : magic(b, a % b); } int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", magic(a, b)); return 0; } on input stream we have integers 4, 45 What's the output integer? How many times will be initiated "magic" function?
using friend function find the maximum number from given two numbers from two different classes.write all necessary functions and constructor for the classes.
write a program to convert temperature from fa height into celcius and vise versa,use modular programming
0 Answers Jomo Kenyatta University,
Write a program that print in screen a tree with its height taken from user by entering number of 4 digits and find the odd numbers then calculate the sum of odd numbers so he get the height of tree?
how to find out the maximum number out of the three inputs.
6 Answers ABC, Apple, C3I, HP, TCS,
write a program that creates a sequenced array of numbers starting with 1 and alternately add 1 and then 2 to create the text number in the series , as shown below. 1,33,4,6,7,9,............147,148,150 Then , using a binary search , searches the array 100 times using randomly generated targets in the range of 1 to 150
How to Split Strings with Regex in Managed C++ Applications?
. Write a program using two-dimensional arrays that computes the sum of data in tows and the sum of data in columns of the 3x3 (three by three) array variable n[3][3].
Write A C++ Program To Input A Number Between 20 To 99 And Display Its Numbername?
write a program that can LOCATE and INSERT elements in array using c++ programming languages.
Ask the user to input three positive integers M, N and q. Make the 2 dimensional array of integers with size MxN, where all the elements of I (I = 1,…,M) line will be members of geometrical progression with first element equal to the number of line (I) and denominator q.