问题:将以正整数n表示成一系列正整数之和. n=n1+n2+n3+...+nk (n1>=n2>=n3>=nk>=1, k>=1)这就是正整数n的一个划分,正整数n不同的划分个数称为正整数n的划分数, 记作p(n)例如:6 有如下11种划分则p(6)=116;5+1;4+2, 4+1+1;3+3, 3+2+1, 3+1+1+1;2+2+2, 2+2+1+1, 2+1+1+1+1;1+1+1+1+1+1;则求任意正整数的划分数p(n).
1. c改编的
class Int
{
private int n;
private int[] a;
public int cnt;
public Int(int x)
{
n = x;
cnt = 0;
a = new int[100];
}
public void outPut(int m)
{
for(int i=0;i<m;i++)
System.out.print(a[i] + "+");
cnt++;
System.out.println();
}
public void fenjie(int n,int m)
{
int i;
if(n==1)
outPut(m);
else
for(i=n-1;i>=1;i--)
if(m==0||i<=a[m-1])
{
a[m]=i;
fenjie(n-i,m+1);
}
}
public static void main(String[] args)
{
int x = 7;
Int i = new Int(x);
i.fenjie(x,0);
System.out.println((x-1) + "的排列共有" + i.cnt + "种!");
}
}
2.用递归解决,关键是上层函数的计算结果要保留到下层函数中。
CODE:
public class SplitInt
{
static int cnt=1;
//hs:上层函数已经分解完毕的数字串;m:上层函数分解完毕的数字;n:本层函数正在分解的数字
//例如m=2,n=3,表示上层函数已经把5这个数字分解出2了,把5-2=3这个数字传给本层分解
void split(String hs,int m,int n)
{
for(int i=m;i<=n/2;i++)
{
split("+"+i+hs,i,n-i);
System.out.println((cnt++)+":"+(n-i)+"+"+i+hs);
}
};
public static void main(String[] args)
{
int num=6;
new SplitInt().split("",1,num);
}
}
结果如下:
1:1+1+1+1+1+1
2:2+1+1+1+1
3:3+1+1+1
4:2+2+1+1
5:4+1+1
6:3+2+1
7:5+1
8:2+2+2
9:4+2
10:3+3
这个代码的特点是代码行少,简单。但是理解起来可能有点复杂。
分享到:
相关推荐
// 给定一个正整数N, 其中 // N = A1 + A2 + ... + An 其中A1, A2, ..., An为斐波那契数列不重复的正整数 (不会有 2个1 这种结果) // 请实现下面的function (function格式请勿修改) // 其中输入参数为N, 返回值为A1,...
Java实现正整数分解质因数的例子。如果数学好,相信这个代码不会难。在本例子中,输入90,打印出90=2*3*3*5。解题思路和方法:对n分解质因数,需要先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰...
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6...
大于1的正整数 n 都可以分解为 n = x1 * x2 * ... * xm 例如:当n=12时,共有8种不同的分解式: 12 = 12 12 = 6*2 12 = 4*3 12 = 3*4 12 = 3*2*2 12 = 2*6 12 = 2*3*2 12 = 2*2*3 对于给定正整数n,计算n共有多少...
大于1 的正整数n可以分解为:n=X1*X2*…*Xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 编程任务: 对于给定的正整数n...
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6...
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1...
本文实例讲述了Python实现将一个正整数分解质因数的方法。分享给大家供大家参考,具体如下: 遇到一个python编程联系题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 版本一: 开始,没动脑子就开始...
整数因子分解问题:给定正整数n,编写递归算法,计算n共有多少种不同的分解式,并输出这些分解式。
Description 大于1的正整数 n 都可以分解为 n = x1 * x2 * ... * xm, 每个xi为大于1的因子,即1。 例如:当n=12时,共有8种不同的分解式: 12 = 12 12 = 6*2 12 = 4*3 12 = 3*4 12 = 3*2*2 12 = 2*6 12 = 2*3*2 12...
* 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 * 分析:对n进行分解质因数,应先找到一个小的质数k,然后按下述步骤完成: *(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,...
大于1 的正整数n 可以分解为:n=x1*x2*…*xm 。 例如,当n=12 时,共有8 种不同的分解式 : 12=12 ; 12=6*2 ; 12=4*3 ; 12=3*4 ; 12=3*2*2 ; 12=2*6 ; 12=2*3*2 ; 12=2*2*3 。 编程任务 : 对于...
设n是一个正整数,现在要将n分解为若干个互不相同的自然数的和,且使这些数的乘积最大。
本文实例讲述了Python实现正整数分解质因数操作。分享给大家供大家参考,具体如下: 遇到一个Python编程练习题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 #!/usr/bin/env python # -*- coding: ...
质因数分解算法例如90=2*3*3*5 java实现
指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。
(数据结构与算法)两个大整数相加 http://blog.csdn.net/eeeduo/article/details/37877179
运用新方法开发了正整数的素数分解的算法,并对其进行了算法分析。
3.正整数分解质因数。4.求100-200之间的素数(只能被1和自身整除),并输出。5.非波拉契数列问题。6.sum=a+aa+aaa+aaaa+...7.给一个不多于5位的正整数,求是几位数,并逆序打印各个数字8.排序9.杨辉三角10.n个人围成圈...