C - Maximum Product UVA - 11059
题目:求出最大的乘积。
由于范围较小,可直接用枚举暴力。
#include<iostream>
using namespace std;
int main(){
int n;
int k=1;
int a[20];
while(cin >> n){
for(int i=1;i<=n;i++){
cin >> a[i];
}
long long max=0;
for(int i=1;i<=n;i++){
long long sum=1;
for(int j=i;j<=n;j++){
sum*=a[j];
if(sum>max) max=sum;
}
}
printf("Case #%d: The maximum product is %lld.\n\n",k,max);
k++;
}
return 0;
}
我第二遍写的时候在想,数据大的时候有没有办法,思路使用sort排序,在全部相乘,如果为负数,除去最大的负数,并排除存在0或全部为0的情况。
/*
#include<iostream>
#include<algorithm>
using namespace std;
bool check(int cnt[],int n){//判断是否全部为0
int f=1;
for (int i=0;i<n;i++){
if(cnt[i]!=0) f=0;
}
return f==1?true:false;
}
bool cmp(int x,int y){
return x>y;
}
int main(){
int f=1;//判断总次数
int n;
int cnt [20];
while(cin >> n){
for(int i=0;i<n;i++){
cin >> cnt[i];
}
sort(cnt,cnt+n,cmp);
long long ans=1;
int k=1;//判断是否全为0
for(int i=0;i<n;i++){
if(cnt[i]==0) continue;
else{
ans=ans*cnt[i];
k=0;
}
}
if(ans<0) {
for(int i=0;i<n;i++){
if(cnt[i]<0) {
ans/=cnt[i];
break;
}
}
}
if(check(cnt,n)) printf("Case #%d: The maximum product is 0.\n\n",f);
else printf("Case #%d: The maximum product is %lld.\n\n",f,ans);
f++;
}
return 0;
}
*/