正整数分解使得乘积最大问题
一、问题描述
设n是一个正整数。现在要求将n分解为若干个自然数之和,使得自然数的成绩最大。输出这个最大的乘积。
要求:
(1)要求这些自然数互不相同
(2)要求这些自然数可以是相同的
二、问题分析:
这类题一开始需要我们手写几个数来看看规律。先做第一问,要求自然数互不相同。从5开始写起,5=2+3,6=2+4,7=3+4,8=3+5,9=2+3+4,10=2+3+5,11=2+4+5
发现规律如下:
(1)尽量使得元素是连续的。
(2)如果有多出来的,从后往前均匀分配到各个元素。考虑到一种特殊情况,当多出来的数比前面已有元素的个数大1时(比如8的情况),先给已有元素的最大元素加1,然后再均匀分配到每个元素。
下面举个栗子,看看携程实习生招聘笔试的这道题:
题目描述:乘积最大
有一个整数n,将n分解成若干个不同自然数之和,问如何分解能使这些数的乘积最大,输出这个乘积m。
输入:
一个整数,不超过50
输出
一个整数
样例输入
15
样例输出
144
c++代码实现:
#include<iostream>
#include<vector>
using namespacestd;int main(){int num;while(cin>>num){int flag[100] = {0};int k=2;int i=0;while(num >= k){//从2开始分解,依次分解为2,3,4,5...连续的元素flag[i++] = k;num -= k;k++;}if(num > 0){//说明有剩余的if(num == flag[i-1]){//说明这时候剩余的数正好比已有的元素个数多1,所以要先给最后一个元素加1flag[i-1]++;num--;}for(int j=i-1;j>=0 &&num>0;j--){flag[j] ++;num--;}}int result = 1;for(int j = 0;j<i;j++){result *= flag[j];}cout<<result<<endl;}//whilereturn 0;
}
对于第二问,对于元素可以是相同的
仍然是通过手写几个数查看一下规律:4=2+2,5=2+3,6=3+3,7=3+2+2,8=3+3+2,9=3+3+3。
发现规律如下:
(1)元素不会超过4,因为4=2+2,又可以转化为2的问题,而5=2+3,5<2*3,所以5总能分解成2和3。
(2)尽可能多分解出3,然后分解出2,不要分出1。
考虑任意一个数,除以3之后的结果有以下3种:
(1)能被3除断,那么就分解为3+3+...+3的情况即可。例如9=3+3+3。
(2)被3除余1,分解为3+3+...+3+2+2或者3+3+...+3+4的情况,例如10=3+3+2+2
(3)被3除余2,分解为3+3+...+3+2的情况,例如11=3+3+3+2。
c++代码:
#include<iostream>
#include<math.h>
usingnamespace std;int main(){int num;while(cin>>num){if(num % 3 == 0){ //考虑被3整除的情况cout<<pow(3,num/3)<<endl;continue;}int flag[100] = {0};int i=0;while(num != 2 && num != 4){//如果不能被3整除,那么除3必余1或者2,而余1和4是同样的情况,这里取4是因为这种情况下最后是两个2,//取4就可以直接把4分解为2+2flag[i++]=3;num-=3;}while(num){ //余2和1的情况,余2就是1个2,余1就是2个2,所以前面才会判断是否等于4,这样就可以化为2个2flag[i++] = 2;num-=2;}int result = 1;for(int j=0;j<i;j++){result *= flag[j];}cout<<result<<endl;}//whilereturn 0;
}
正整数分解使得乘积最大问题相关推荐
- C语言经典例14-将一个正整数分解质因数
目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 将一个正整数分解质因数.例如:输入909090,打印出 90=2∗3∗3∗590 = 2 * 3 * 3 * 590=2∗3∗3∗5 2 分 ...
- 每日程序C语言7-将一个正整数分解质因数
题目 题目:将一个正整数分解质因数,例如:输入90,打印出90=2 * 3 * 3 * 5 算法分析: 如果这个数的最小质数恰好等于n,说明分解质因数的过程已经束,打印出即可 主要代码 void fu ...
- 正整数分解为几个连续自然数之和
题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...
- 【编程练习】正整数分解为几个连续自然数之和
题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
代码: package com.liron.p1;import java.util.Scanner;/**将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.*/ public cla ...
- python将一个正整数分解质因数
将一个正整数分解质因数 1. 解法一 2. 解法二 3. 解法三 4. 解法四 例如输入90,输出:90=2*3*3*5 对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成: (1)如果 ...
- python对整数进行因数分解_浅谈将一个正整数分解质因数的逻辑思维和Python开发设计...
今天讨论的是如何将一个正整数分解质因数.例如:输入36,打印出36=2*2*3*3. 1.首先要清晰两个概念,要知道什么是质数,如何进行分解质因数?质数是指在大于1的自然数中,除了1和它本身以外不再有 ...
- python 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
# 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.n = int(input('请输入需要分解的正数:')) # 创建一个列表用来存放遍历出来的因数 lt = [] # 给n换个 ...
- Java——将一个正整数分解质因数
目录 题目描述 代码实现 结果展示 题目描述 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 代码实现 import java.util.Scanner;public class ...
- 明源笔试题目--将一个正整数分解质因数
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的 ...
最新文章
- ASP导出EXCEL乱码?试试这个
- win8: hello gril
- nvidia显卡对比分析
- 转 android anr 分析示例,[摘]Android ANR日志分析指南之实例解析
- VMware 报错“Intel VT-x处于禁止状态”
- iPhone 12性能首曝:6GB内存、A14“挤牙膏”
- 前端如何展示商品属性:SKU多维属性状态判断算法的应用-Vue 实现
- 算法--最大连续子序列和(动态规划,分而治之)
- wap4410n 服务器上限修改,cisco wap4410n设置方法
- IPV6的福音---六维空间
- 微信小程序 ES6语法
- 非智能手机通信录备份并还原至Android智能手机方法
- c语言中文网GUI,golang gui介绍
- 如何理解会议中控系统
- 列表,元组,字典,集合的特点
- mysql 5.7 在线ddl
- 【nacos】springboot @Value @NacosValue 使用时可能无效
- Python基础:第019课——窗口缩放事件、最小化状态及处理
- MAC A1466 820-00165-A 进水不触发
- 58同城和赶集网要合并了!
热门文章
- java入门拼图小游戏_【java】JavaFX从零开始实现拼图小游戏
- php随机产生4乘4矩阵,matlab函数rand:产生均匀分布的随机数或矩阵的函数
- SAP License:公司上一套sap系统得多少钱?
- 大数据有哪些基本特征?
- python开发板卡驱动开发_树莓派开发板如何驱动LED灯
- Android 内存管理中的 Shallow heap Retained heap
- 异常:org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hiber
- 最短路径(信息学奥赛一本通 - T1378)
- 经济法基础——第五章第二节、个人所得税法律制度
- 工欲善其事之Redis可视化管理工具