整数分解成不同加数的最大乘积
来源:互联网 发布:涂师傅数据恢复能用吗 编辑:程序博客网 时间:2024/05/22 20:44
题库建设
题目
设n为一自然数,n可以分解成若干个不同的自然数的和,这样的分法有很多种,比如n=10, 10可以分解为:10=5+4+1; 10=5+3+2; 10+9+1; 10=8+2; 10=7+3; 10=6+4; 10=,7+2+1; 10=6+3+1;…。在所有这些分法中,各加数乘积最大的为30, (10=5+3+2中加数的乘积为5*3*2=30)。试编写程序,求各种分解方法中各加数乘积的最大值。
输入要求:输入只有1行,自然数n。
输出要求:输出也只有1行,所有分解方法中各加数乘积的最大值。
代码
发现一个规律:就是连续的整数乘积是最大的,比如12:
12 = 2+3+4+3=3+4+5=2+4+6
发现3*4*5最大
13 = 2+3+4+4 = 3+4+6最大
可以总结出:从2开始依次求出连续的加数因子,最后将剩下的数平均分到前面的因子里(如果有的话),比如9 = 2+3+4就不用分了,像13这种平均分完之后还剩了1,那肯定加在最大的数了。
#include <iostream>#include <algorithm>using namespace std;int main() { int n = 0;//待分解的数 cin >> n; int factor[50] = { 0 };//存放因子的数组 int i = 0; //从2开始分解出因子 for (int j = 2; j <= n; j++) { factor[i++] = j; n -= j; } if (0 != n) { if (n == i + 1) {//即现在的n比因子数还多一个,不可能均匀分配,所以加在最后先 factor[i - 1]++; n--; } for (int j = 0; j < n; j++) {//从后往前依次加1 factor[i - j - 1]++; } } int max = 1; for (int j = 0; j < i; j++) { max *= factor[j]; } cout << max << endl; return 0;}
1 0
- 整数分解成不同加数的最大乘积
- 乘积最大的分解
- 数字分解为不同自然数的最大乘积
- 有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大,输出这个乘积m
- 和的加数分解
- 数和分解,乘积最大-vijos整数分解(版本2)
- 贪心算法求所有分解方法中各加数乘积的最大值
- 贪心算法——最大整数分解最大乘积
- 使一个正整数分解为若干整数,使其各个数的乘积最大
- 整数分解为质数的乘积
- (Relax 水题1.2)POJ 1032 Parliament(将n分解成若干个互不相等的整数的和,并且是这些整数的乘积最大)
- sdut 1293 乘积最大的分解
- 积最大的整数分解
- 积最大的整数分解
- ZJU2037 Parliament - 乘积最大的整数拆分
- HDU2709Sumsets整数分解为加数,递推公式
- 求整数m的最大加数为n的组合问题
- 每一个比1大的整数N只能有一种方式分解成素数的乘积。
- MySQLAdministrator5.0配置文件位置
- 练习打字第三天!
- MiniUI 快速上手
- Oracle 数据库导入导出 dmp文件
- Qt QAxObject 操作Excel
- 整数分解成不同加数的最大乘积
- linux下查看主机硬件信息
- 【平衡树】平衡树教学
- android中怎样把一个button按钮放到屏幕底部
- win7基于maven和eclipse连接远程Linux服务器的hadoop2.0集群的入门程序
- Spark定制班第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错
- Linux内存中Swap机制
- NSOperation
- 聊聊魔性的动画引擎pop