转载地址:http://www.dewen.org/q/4311
1.问题描述:给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合中乘积最大的一组。
2.算法思想:
3.代码实现:
#include <iostream>
using namespace std;
const int N = 5;
int main()
{
int a[N];
int i;
for(i =0; i <= N-1; i++)
cin >> a[i];
int s[N],t[N+1],p[N+1];
s[0] = 1;
t[N] = 1;
//s[0] s[1] s[2] .....s[N-1]
for(i = 1; i<= N-1;i++)
s[i] = s[i-1]*a[i-1];
//t[N] t[N-1] t[N-2] ... t[1]
for(i = N-1 ;i>=1;i--)
t[i] = t[i+1]*a[i];
for(i = 1;i<=N; i++)
p[i] = s[i-1]*t[i];
int max = 1;
int del_max_index = 1;
for(i = 1;i<=N;i++)
{
if(p[i]>=max)
{
max = p[i];
del_max_index = i;
}
}
cout << "Except for the " << del_max_index << " st number, the multiply of other n-1 is max value" << endl;
return 0;
}
/*
arr[0]---arr[N-1]
s[0] = 1;
t[N] = 1;
s[i] = s[i-1]*arr[i-1]; i = 1 -- N-1
t[i] = t[i+1]*arr[i]; i = N-1 -- 1
p[1] = s[0]*t[1];//前0个元素 和 后 N-1个元素的乘积
p[2] = s[1]*t[2];
p[N] = s[N-1]*t[N];//前N-1个元素后 后N-N(0)个元素的乘积
*/
4.运行结果: