这其实也是个搜索组合问题,但是却可以借助动态规划的思想,将问题一步一步分解
首先来个简单点的,输出全部的可能!
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
//存储用户输入的整数
int n;
//存储用户输入的要拆分的个数
int m;
//计数器,记录拆分结果的个数
int totalKind;
//存储拆分出的因数
//注意:这里只定义了100长度的数组空间,可根据需要自己扩充
int a[100];
void print()
{
cout<<n<<" = "<<a[1];
for (int i=2; i<=m; i++)
{
cout<<" * "<<a[i];
}
//输出换行
cout<<endl;
//拆分结果个数自增
totalKind++;
}
void Split(int arrayIndex,int preDivisor,int newDivisor)
{
//判断是否拆分结束,如果结束则输出该种拆分结果
//拆分结束的条件是:
//数组下标(即拆分的因数的个数)等于用户输入的拆分个数
//并且当前因数大于前一个因数(即保证因数从小到大获取,避免重复)
if (arrayIndex==m && newDivisor>=preDivisor)
{
//存储当前(新)的因数
a[arrayIndex] = newDivisor;
//输出当前拆分结果
print(); //不是一直存储,是只要满足条件就打印
//退出该函数
return;
}
//如果拆分没有结束,则将当前(新)的因数继续拆分
for (int i=preDivisor; i<=newDiviso