将一个正整数分解成任意几个数的乘积

这其实也是个搜索组合问题,但是却可以借助动态规划的思想,将问题一步一步分解首先来个简单点的,输出全部的可能!#include <iostream>#include <string>#include <cstdlib>using namespace std; //存储用户输入的整数int n;//存储用户输入的要拆分的个数int m;//计数器,...
摘要由CSDN通过智能技术生成

这其实也是个搜索组合问题,但是却可以借助动态规划的思想,将问题一步一步分解

首先来个简单点的,输出全部的可能!

#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<=newDivisor; i++)
     {
            //如果当前因
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值