描述
有一个长度为n 的数组,想将这个数组进行求和,即 sum=a1+a2 +…+an 。 你可以使用一次变化(也可以不使用),将其中一个加号变成乘号,使得sum 最大。求出最大的sum 。
输入
第一行输入一个整数 n 。 第二行输入 n 个整数表示数组 a 。
1≤n≤10^5
1≤ai≤10^9
输出
输出一个整数表示答案。
输入:
6
1 1 4 5 1 4
输出
27
提示
例子说明: 可以将 4 和 5 之间的加号改成乘号。 1 + 1 + 4 * 5 + 1 + 4 = 27
参考代码:
要让最后的sum最大,可以先对数字进行排序,判断最大的两位数字相乘之积是否大于相加之和,然后对应相加,求和就可以了。
这种情况,就不需要改“+”为“*”
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,temp,sum;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
for(int j=0;j<n-1;j++){
if(a[j]<a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
if(a[0]*a[1]>a[0]+a[1])
sum = a[0]*a[1];
else
sum = a[0]+a[1];
for(int i=2;i<n;i++)
sum +=a[i];
cout<<sum;
return 0;
}