带你粗略了解c++的最大乘积

发布时间:2026/10/30 22:49:34
带你粗略了解c++的最大乘积 今天给大家讲最大乘积这道题目最大乘积内存限制256 MiB时间限制1000 ms输入文件maximum.in输出文件maximum.out题目类型传统评测方式文本比较题目描述给你 n n n个整数 a 1 , a 2 , a 3 , a 4... a n a1,a2,a3,a4...an a1,a2,a3,a4...an 从中任意挑选出个数字使得乘积最大输出乘积最大值。输入格式输入有多组测试数据。第一行为整数 t t t表示测试数据组数。每组测试数据第一行为整数 n n n表示数字的数量。每组测试数据第二行有 n n n个整数 a 1 , a 2 , . . . . a n a1,a2,....an a1,a2,....an输出格式每组测试数据输出只有个整数表示挑选出个数字的乘积最大值。样例样例输入45-1 -2 -3 -4 -56-1 -2 -3 1 2 -16-1 0 0 0 -1 -16-9 -7 -5 -3 -2 1样例输出-120120945思路这个题目其实不难。我们先分析一下这个题目。这个题目要我们从一组数据中 选取五个数 使得这五个数乘积最大。简单一想 这个不很简单 我们直接从中选取五个最大的数字 然后将这五个数的成乘积直接输出不就完了吗。 但是 仔细一想又发现 不对。刚刚只局限于正数的情况 可是这里还有负数呢! 所以 我们要对这选出来的五个数分情况讨论。我们要让乘积最大 那么选出来的五个数的乘积 都尽量应该是正数 所以 我们如果要选择负数 那么也最好让它成双成对的出现 因为负负得正 并且这个负数越小乘积就越大。根据此推断 我们将这五个数分为以下几种情况。一0个负数 5个正数。即选出这个数列里最大的五个数。二2个负数 3个正数。即选出这个数列里最大的三个数和最小的两个数。三4个负数 1个正数。即选出这个数列里最大的一个数和最小的四个数。然后我们将这三种情况算出来的乘积取一个最大值即可。但是这样就完了吗 不你想多了。因为如果这 n n n个数全是负数怎么办很简单 我们为了让乘积最大 我们将会选取最大的五个负数。但当我们再回头看一下 发现这不就是第一种情况吗所以 我们就不需要特判这种情况了。代码12345678910111213141516171819202122#includebits/stdc.husingnamespacestd;longlonga[100005];intn;intt;intmain(){freopen(maximum.in,r,stdin);freopen(maximum.out,w,stdout);//文件名输入输出cint;while(t--){cinn;for(inti1;in;i)cina[i];//输入sort(a1,an1);// 给这个数组排序coutmax(a[n]*a[n-1]*a[n-2]*a[n-3]*a[n-4],max(a[n]*a[n-1]*a[n-2]*a[1]*a[2],a[n]*a[1]*a[2]*a[3]*a[4]))endl;//按照思路中所讲的三种情况进行取最大值 并记得换行}return0;//返回 0}总结本篇文章就到这里了希望能给你带来帮助

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询