问题标题: 酷町堂:5516 乘积最大

0
0
已解决
柯奕涵
柯奕涵
新手守护
新手守护

题目链接: 酷町堂: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;

}


0
已采纳
郭梓强
郭梓强
初级光能
初级光能

把flag去掉,再把maxn的初值变成-1,最后直接输出maxn即可

郭梓强在2022-08-16 12:45:21追加了内容

因为maxn没有合适的答案,会输出初值-1

郭梓强在2022-08-16 15:13:19追加了内容

孩子,你数组定义小了,定义成100010保证对

0
崔子周
崔子周
高级天翼
高级天翼

同学,这道题的思路是定义数组变量,输入,循环输入数组,枚举(类似于选择排序,在选择排序代码里再加上一层)判断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

望采纳

我要回答