题目链接: 酷町堂:5516
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,w;
int maxn=-0x3f3f3f3f;
int a[105];
bool flag=false;
int main(){
cin>>n>>w;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
for(int k=j+1;k<=n;k++){
if(a[i]+a[j]+a[k]<=w && a[i]*a[j]*a[k]>maxn){
maxn=a[i]*a[j]*a[k];
flag=true;
}
}
}
}
if(flag==true) cout<<maxn;
else cout<<"-1";
return 0;
}
把flag去掉,再把maxn的初值变成-1,最后直接输出maxn即可
郭梓强在2022-08-16 12:45:21追加了内容
因为maxn没有合适的答案,会输出初值-1
郭梓强在2022-08-16 15:13:19追加了内容
孩子,你数组定义小了,定义成100010保证对
同学,这道题的思路是定义数组变量,输入,循环输入数组,枚举(类似于选择排序,在选择排序代码里再加上一层)判断3个数之和不超过一个给定的值w并且数组[i]*数组[j]*数组[k]大不大于最大值成不成立,如果成立,更新最大值,最大值等于数组[i]*数组[j]*数组[k]。
下面是伪代码:
循环(i=1~n){
输入>>数组[i];
}
循环(i=1~n){
循环(j=i+1~n){
循环(k=j+1~n){
如果(数组[i]+数组[j]+数组[k]小于等于w并且数组[i]*数组[j]*数组[k]>最大值){
最大值=数组[i]*数组[j]*数组[k];
}
}
}
}
输出<<maxw;
输入输出按照题目要求,定义两个正整数n和w,数组(数组长度要大于100000),最大值
百分百AC
望采纳
