• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ 整数拆分方法详解

C++ 整数拆分方法详解

作者:Code·Hadilo 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Code·Hadilo 通过本文主要向大家介绍了c++ 保留整数的函数,c++整数转字符串,c++大整数加法,c++ 取整数,c++输出第二个整数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、问题背景

  整数拆分,指把一个整数分解成若干个整数的和

  如 3=2+1=1+1+1 共2种拆分

  我们认为2+1与1+2为同一种拆分

二、定义

  在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)

  即 n=x1+x2+······+xk-1+xk ,任意 x≤m

  在此我们采用递归递推法

三、递推关系

  1、n=1或m=1时 

    拆分方案仅为 n=1 或 n=1+1+1+······

     f(n,m)=1

  2、n=m时

     S1选取m时,f(n,m)=1,即n=m

     S2不选取m时,f(n,m)=f(n,m-1)=f(n,n-1),此时讨论最大拆分数为m-1时的情况

    可归纳 f(n,m)=f(n,n-1)+1

  3、n<m时

     因为不能选取m,所以可将m看作n,进行n=m时的方案,f(n,m)=f(n,n)

  4、n>m时

     S1选取m时,f(n,m)=f(n-m,m),被拆分数因选取了m则变为n-m,且n-m中可能还能选取最大为m的数

     S2不选取m时,f(n,m)=f(n,m-1),此时讨论最大拆分数为m-1时的情况

     可归纳 f(n,m)=f(n,m-1)+f(n-m,m)

总递推式为

代码如下

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int f(int n,int m)
{
if ((n!=1)&&(m!=1))
{
if (n>m) return f(n-m,m)+f(n,m-1);
else return 1+f(n,n-1);
}
else return 1;
}
void work()
{
int n,m;
cin>>n>>m;
cout<<f(n,m);
}
int main()
{
freopen("cut.in","r",stdin);
freopen("cut.out","w",stdout);
work();
return 0;
}
</div>

以上所述是小编给大家介绍的C++ 整数拆分方法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于C++中定义比较函数的三种方法小结
  • C++ 整数拆分方法详解
  • C++通过自定义函数找出一个整数数组中第二大数的方法
  • 浅析C和C++函数的相互引用
  • 浅析c/c++中函数的参数传递
  • 探讨:C++中函数返回引用的注意事项

相关文章

  • 2017-05-28STL常用容器详细解析
  • 2017-05-28C++模板类的用法实例
  • 2017-05-28浅谈C++中派生类对象的内存布局
  • 2017-05-28简要对比C语言中的dup()函数和dup2()函数
  • 2017-05-28深入解读C++中的指针变量
  • 2017-05-28浅谈#ifndef,#define,#endif的作用和用法
  • 2017-05-28实现opencv图像裁剪分屏显示示例
  • 2017-08-27经典的字符串模式匹配算法KMP算法
  • 2017-05-28C++获取本机MAC,IP,MASK地址的方法
  • 2017-05-28详解state状态模式及在C++设计模式编程中的使用实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入解析C++编程中范围解析运算符的作用及使用
    • C语言冒泡排序算实现代码
    • linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql
    • 安装OpenMPI来配合C语言程序进行并行计算
    • C语言实现基于最大堆和最小堆的堆排序算法示例
    • C++获取zip文件列表方法
    • 深入C++实现函数itoa()的分析
    • c语言与c++基础知识点(必看)
    • C语言快速幂取模算法小结
    • C++获得本机所有网卡的IP和MAC地址信息的实现方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有