最优自然数分解问题
来源:互联网 发布:人工智能5.4ppt 编辑:程序博客网 时间:2024/04/27 16:19
Description
问题描述:设n是一个正整数。
(1)现在将n分解为若干个互不相同的自然数之和,且使这些自然数的乘积最大。
(2)现在将n分解为若干个自然数之和,且使这些自然数的乘积最大。
编程任务:对于给定的正整数n,编程计算问题(1)和(2)的最优分解的最大乘积。
注意:
这里的自然数不含0但包含1。
特别地,当整数n无法分解为若干互不相同的加数时,即自身视为单独的一个加数,比如输入2,问题(1)的解输出为2。
而如果整数n可以分解为若干互不相同的加数时,不考虑自身为单独加数的情况,比如4,问题(1)的解输出为3,而非4。
输入格式
只有一个正整数n(1<=n<=100)。
输出格式
输出待解问题(1)和(2)的最大乘积,中间空格相连,这两个数可能较大请用64位整数。
如,输入n为10,若加数互不相同,则n=2+3+5,此时最大乘积为2*3*5=30。
若加数可相同,则n=2+2+3+3,此时最大乘积为2*2*3*3=36。
输入样例
10
输出样例
30 36
#include<stdio.h> __int64 fun1(__int64 n){__int64a[101];__int64 i,j,k,flag,total=1;if(n==1||n==2)return n;if(n==3||n==4)return n-1;for(a[0]=2,n=n-2,i=1;n>a[i-1];i++){a[i]=a[i-1]+1;n=n-a[i];}flag=i;if(n!=0){if(n>i){k=n/i;for(j=0;j<i;j++)a[j]=a[j]+k;n=n-i;}for(i=i-1;n>0;i--){a[i]++;n--;}}i=flag;for(j=0;j<i;j++)total=total*a[j]; return total;}__int64 fun3(__int64 a,__int64 b){__int64 c=1;while(b>0){c=c*a;b--;}return c;}__int64 fun2(__int64 n){if(n%3==0)return fun3(3,n/3);else if(n%3==1)return 4*fun3(3,(n-4)/3);else if(n%3==2)return 2*fun3(3,(n-2)/3);}__int64 main(){ __int64 n;scanf("%I64d",&n);printf("%I64d %I64d",fun1(n),fun2(n)); }
0 0
- 最优自然数分解问题
- 自然数最优分解问题(纯分析)
- 11091 最优自然数分解问题(贪心)
- 4.1 11091 最优自然数分解问题
- 最优分解问题
- 算法 最优分解问题
- 最优分解问题
- 最优分解问题
- 最优分解问题
- 最优分解问题
- 最优分解问题
- 最优分解问题
- 任意自然数分解为连续自然数和问题
- 自然数分解
- HUNNU-10307-最优分解问题
- 最优分解问题-贪心算法
- 贪心算法:最优分解问题
- 算法分析--最优分解问题
- Java中的反射
- hdu 3336 count the string
- input中id和name属性的区别
- Blender for Robotics | Part 4 | Programming in the GameEngine
- 浅谈单片机中变量访问的互斥
- 最优自然数分解问题
- 常用的Linux命令
- java double 精度损失问题
- oracle 查询前30条数据
- UCenter整合其他网站略写
- php获取当前地址栏中的地址
- Junit4.x高级用法详解(一)
- 反汇编学习之字符、字符串、布尔类型
- 职场中如何面对他人排挤