题目要求确定正整数n的分解方案,该分解方案应满足分解出的数互不相同,且保证乘积最大。 两个部分:最佳分解,乘积 1. 确定最佳分解的形式 首先,我们确定怎样的分解是一个最佳分解。我们可以写几个数找规律: 5 = 1 + 4 = 2 + 3; 6 = 1 + 5 = 2 + 4; 7 = 1 + 6 = 2 + 5 = 3 + 4 = 1 + 2 + 4; 8 = 1 +
一个正整数一般可以分为几个互不相同的自然数的和,如3=1+23=1+2,4=1+34=1+3,5=1+4=2+35=1+4=2+3,6=1+5=2+46=1+5=2+4。 现在你的任务是将指定的正整数nn 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。 输入格式 只一个正整数nn,(3 \leq n \leq 100003≤n≤10000...
若1作因数,则显然乘积不会最大。把2004分拆成若干个互不相等的自然数的和,因数个数越多,乘积越大。为了使因数个数尽可能地多,我们把2004分成2+3…+n直到和大于等于2004。 若和比2004大1,则因数个数至少减少1个,为了使乘积最大,应去掉最小的2,并将最后一个数(最大)加上1。 若和比2004大k(k≠1),...
一个正整数一般可以分为几个互不相同的自然数的和,如 3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4。 现在你的任务是将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。 【输入】 只一个正整数n,(3≤n≤10000)。 【输出】 第一行是分解方案,相邻的数之间用一个空格分开,...
LeetCode P1464.数组中两元素的最大乘积 给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)(nums[j]-1) 取得最大值。 请你计算并返回该式的最大值。 示例 1: 输入:nums = [3,4,5,2] 输出:12 解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大...
P1249 最大乘积 #include <bits/stdc++.h> using namespace std; typedef long long LL; /** 这道题本蒟蒻直接开始无脑找规律,一小时之后终于找出来了,打完发现高精忘了。。。 很明显就知道1在分解中没有任何作用,所以不会分1; 举个例子吧9=2+3+4;很明显2 3 4便是最优解;...
如果差值等于0,不用操作 如果差值等于1,就舍去2,然后最大的数+1; 如果差值超过1,就直接舍去队列中这个差值的数 最后再把所有的数相乘即可 1importjava.io.*;2importjava.util.*;3importjava.math.*;456publicclassMain {7publicstaticvoidmain(String[] args) {8int[]vis =newint[10010];9int[]res =ne...
因子拆分出来之后,再进行高精度*低精度计算乘积即可。 分析完毕。 100分代码: #include<bits/stdc++.h>usingnamespacestd;constintN =10005;intn;intnums[N];// nums[i] = 1表示i是n的一个因子intidx;//最大的因子vector<int>mul(vector<int> &a,intb){ ...
题目链接:P1249 解题思路: 有两行输出,先找出乘积最大的那些数,然后用高精度计算乘积。 要想乘积最大,要尽可能使因数多,并且因数之间的差尽可能小,可以从2开始累加,当sum大于n时,把多出的部分取掉即可。 AC代码: 1 #include <cstdio> 2 #include &