整数划分(C语言实现)
来源:互联网 发布:网络棋牌室平台代理 编辑:程序博客网 时间:2024/06/05 23:02
指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。
所谓整数划分,是指把一个正整数n写成为
其中,为正整数,并且;为n的一个划分。
如果中的最大值不超过m,即,则称它属于n的一个m划分。
这里我们记n的m划分的个数为。
例如,当n=4时,有5个划分,即,,,,。
注意:和被认为是同一个划分。
根据n和m的关系,考虑一下几种情况:
(一)当时,无论m的值为多少,只有一种划分,即。
(二)当时,无论n的值为多少,只有一种划分,即n个1,。
(三)当时,根据划分中是否包含n,可以分为以下两种情况:
(1)划分中包含n的情况,只有一个,即。
(2)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有划分。
因此。
(四)当时,由于划分中不可能出现负数,因此就相当于。
(五)当时,根据划分中是否包含最大值m,可以分为以下两种情况:
(1)划分中包含m的情况,即,其中的和为n-m,因此这种情况下为。
(2)划分中不包含m的情况,则划分中所有值都比m小,即n的划分,个数为。
因此。
C语言实现
#include<stdio.h>
void
main()
{
int
equation(
int
n,
int
m);
int
n,m;
printf
(
"Please input 'n'(0<n<100):"
);
scanf
(
"%d"
,&n);
printf
(
"Please input 'm'(0<m<=n):"
);
scanf
(
"%d"
,&m);
printf
(
"quantity:%d\n"
,equation(n,m));
}
int
equation(
int
n,
int
m)
{
if
(n==1||m==1)
return
(1);
else
if
(n<m)
return
equation(n,n);
else
if
(n==m)
return
1+equation(n,n-1);
else
return
equation(n-m,m)+equation(n,m-1);
}
0 0
- 整数划分(C语言实现)
- C语言实现整数划分问题
- 整数划分的非递归算法(C语言)
- (C语言)整数划分问题 递归和递推
- 整数划分问题(C语言求解)
- 大整数乘法(C语言实现)
- 整数逆序(c语言实现)
- 整数划分的问题(c)
- 整数划分问题的递归算法-c语言
- 算法实现(4)整数划分问题
- 第一讲、整数划分(回溯实现)
- 递归实现整数划分
- C/C++ 整数划分问题
- C/C++ 整数划分问题
- 整数划分问题java实现
- 整数划分(递归)
- 整数划分(二)
- 整数划分(2)
- 图像处理与计算机视觉概述
- Spring源码解读:EventListener接口
- PTAM的解析
- java网络编程协议与基础1—基本网络概念
- Bi-shoe and Phi-shoe (数论(欧拉函数))
- 整数划分(C语言实现)
- 从输入url到页面展示到底发生了什么
- [iOS
- SVN Unable to connect to a repository at URL
- windows server 2008 系统安装
- Criteria左外连接以及去重复数据
- IE11被识别为较低版本,页面错位问题
- [李景山php] php高级程序员简历的要点
- 251 ubuntu 跳板机下如何下载文件到本地