将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
思路:
利用递归分解成多个子问题,如变成1+6的分解,1+1+5的分解等等。
#include<stdio.h>
int a[30] = { 0 };
int n = 0;
int count = 0;
void div_num(int index, int start, int num)
{
if (num == 0)
{
printf("%d=%d", n,a[0]);
for (int i = 1; i < index; i++)
{
printf("+%d", a[i]);
}
if (count < 3)
{
printf(";");
count++;
}
else
{
printf("\n");
count = 0;
}
}
else
{
for (int i = start; i <= num; i++)
{
a[index] = i;
start = i;
div_num(index + 1, start, num - i);
}
}
}
int main()
{
int num = 0;
scanf("%d", &num);
n = num;
div_num(0, 1, num);
return 0;
}
index是用于存放待分解数字的数组下标,start表示待分解数字最小可分解出来的数字大小,num表示待分解的数字。