如何求一个数的划分

来源:百度知道 编辑:UC知道 时间:2024/05/31 18:52:17
将任意一正整数n表示成一系列正整数之和,这就是正整数n的一个划分,正整数n不同的划分个数称为正整数n的划分数,记作p(n)。
例如:6 有如下11种划分,则p(6)=11;6; 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。....麻烦告诉我大概是怎么算的...谢谢
谢谢啊....不过我主要是想知道怎么算的...而且我只能看懂C或者C++

我这里有个C语言的,是输出所有划分的。
你自己尝试一下改成JAVA的吧。

#include "stdio.h"

void main()
{
int n;
scanf("%d", &n);

if (n == 1)
{
printf("1=1\n");
return;
}

if (n == 2)
{
printf("2=1+1\n");
return;
}

int *a = new int(n);
int top = 0;
a[0] = n - 1;
a[1] = 1;
top = 2;

int i;
do{
printf("%d=%d", n, a[0]);
for (i = 1; i < top; i++)
{
printf("+%d", a[i]);
}
printf("\n");

int s = 0;
do{
s += a[--top];
}while (top >= 0 && a[top] == 1);
if (top == -1)
{
break;
}

int d = a[top] - 1;
if (d == 1)
{
while (s > 0)
{
a[top++] = 1;
s--;
}
}
else
{
do{
a[top++] = d;
s -= d;
}wh