java整数划分递归_整数划分问题(递归法)

整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:

n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。

如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m);

例如但n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};

注意4=1+3 和 4=3+1被认为是同一个划分。

该问题是求出n的所有划分个数,即f(n, n)。下面我们考虑求f(n,m)的方法;

1.递归法:

根据n和m的关系,考虑以下几种情况:

(1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1};

(2)当m=1时,不论n的值为多少,只有一种划分即n个1,{1,1,1,...,1};

(3)当n=m时,根据划分中是否包含n,可以分为两种情况:

(a)划分中包含n的情况,只有一个即{n};

(b)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。

因此 f(n,n) =1 + f(n,n-1);

(4)当n

(5)但n>m时,根据划分中是否包含最大值m,可以分为两种情况:

(a)划分中包含m的情况,即{m, {x1,x2,...xi}}, 其中{x1,x2,... xi} 的和为n-m,因此这情况下

为f(n-m,m)

(b)划分中不包含m的情况,则划分中所有值都比m小,即n的(m-1)划分,个数为f(n,m-1);

因此 f(n, m) = f(n-m, m)+f(n,m-1);

综上所述:

f(n, m)=   1;              (n=1 or m=1)

f(n,m)   =    f(n, n);                   (n

1+ f(n, m-1);              (n=m)

f(n-m,m)+f(n,m-1);         (n>m)

#include

using namespace std;

int equationCount(int n,int m)

{

if(n==1||m==1)

return 1;

else if(n

return equationCount(n,n);

else if(n==m)

return 1+equationCount(n,n-1);

else

return equationCount(n,m-1)+equationCount(n-m,m);

}

int main(void)

{

int n;

while(scanf("%d",&n)!=EOF&&(n>=1&&n<=120))

{

printf("%d\n",equationCount(n,n));

}

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组移位

昨天今日头条笔试&#xff0c;发现好简单&#xff0c;一写出了几个问题&#xff0c;回来才想出来。 一个长度不超过10000的整数数组&#xff0c;里面有若干个0&#xff0c;请事先一段代码&#xff0c;将数组中值为0的元素移动到数组的最前面&#xff0c;其余元素相对位置保持不…

LeetCode 2047. 句子中的有效单词数

文章目录1. 题目2. 解题1. 题目 句子仅由小写字母&#xff08;a 到 z&#xff09;、数字&#xff08;0 到 9&#xff09;、连字符&#xff08;-&#xff09;、标点符号&#xff08;!、. 和 ,&#xff09;以及空格&#xff08; &#xff09;组成。 每个句子可以根据空格分解成 …

java技术学习内容_Java开发主要都学些什么内容?

展开全部Java开发培训班主要学32313133353236313431303231363533e58685e5aeb931333363386164习的课程大纲&#xff0c;你可以看下。第一阶段:JavaSE基础、MySQL数据库应用1.1 Java SE基本语法Eclipse开发环境类和对象封装、继承和多态Java数据结构(栈、队列、链表的实现)IO流技…

LeetCode 2048. 下一个更大的数值平衡数(枚举)

文章目录1. 题目2. 解题1. 题目 如果整数 x 满足&#xff1a;对于每个数位 d &#xff0c;这个数位 恰好 在 x 中出现 d 次。 那么整数 x 就是一个 数值平衡数 。 给你一个整数 n &#xff0c;请你返回 严格大于 n 的 最小数值平衡数 。 示例 1&#xff1a; 输入&#xff1a…

LeetCode Longest Common Prefix

原题链接在这里&#xff1a;https://leetcode.com/problems/longest-common-prefix/ 题目&#xff1a; Write a function to find the longest common prefix string amongst an array of strings. 题解&#xff1a; strs中的第一个字符串从i 0 开始&#xff0c;取char, 取出c…

java 主方法 this_java main 方法怎么创建

学校作业。。publicstaticvoidmain(String[]args){不知道加在哪里packagepersonproject;publicclassPerson{publicstaticintlastId0;privateStringname;privateStringgender;privateS...学校作业。。public static void main(String[] args) {不知道加在哪里package personproj…

输出国际象棋输出余弦曲线

输出国际象棋棋盘 1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 int main(){5 int i,j;6 SetConsoleOutputCP(437);//显示大于127的ASiic 码 7 for(i0;i<8;i){8 for(j0;j<8;j){9 if((ij)%20 ){…

LeetCode 2049. 统计最高分的节点数目(DFS)

文章目录1. 题目2. 解题1. 题目 给你一棵根节点为 0 的 二叉树 &#xff0c;它总共有 n 个节点&#xff0c;节点编号为 0 到 n - 1 。 同时给你一个下标从 0 开始的整数数组 parents 表示这棵树&#xff0c;其中 parents[i] 是节点 i 的父节点。 由于节点 0 是根&#xff0c;所…

python源文件编码的含义_【原创】Python 源文件编码解读

以下内容源于对 PEP-0263 的翻译和解读&#xff0c;同时给出了一些网上网友的说法。 我是分割线 PEP 0263 -- Defining Python Source Code Encodings【摘要】给出声明 Python 源文件编码的语法。该编码信息后续会被 Python 解析器用于解析源文件。这种方式增强了对源文件中 U…

MyEclipse中SVN的常见的使用方法

本次主要内容&#xff1a; 一 、导入项目 &#xff08;Checkout&#xff09;。从svn资源库检出 二 、更新 &#xff08;Update&#xff09; 三、锁&#xff08;对要修改的文件加锁&#xff0c;防止文件冲突&#xff09; 四、提交&#xff08;项目修改后的提交&#xff09; 五、…

fastapi 路径依赖项Depends / 装饰器依赖dependencies / 全局依赖 / 带 yield 的依赖

文章目录1. 依赖项2. 类作为依赖3. 子依赖项3.1 多次使用同一个依赖项4. 路径操作装饰器依赖项5. 全局依赖项6. 带 yield 的依赖项7. 使用带 yield 上下文管理器作为依赖项learn from https://fastapi.tiangolo.com/zh/tutorial/dependencies/ 1. 依赖项 只能传给 Depends 一…

与number_format函数有关的一个bug?

最近在做一个模仿excel功能的在线项目。其中有一个功能&#xff0c;数据列表中的数据&#xff0c;到了最后一列都要进行总计。这本来没什么难度。直接从数据库取出数据后&#xff0c;进行foreach相加就行 了。这是如此的简单&#xff0c;以至于用了不到五分钟写就了功能&#x…

fastapi 安全性 / APIRouter / BackgroundTasks / 元数据 / 测试调试

文章目录1. 例子2. 获取当前用户3. 使用密码和 Bearer 的简单 OAuth24. 使用&#xff08;哈希&#xff09;密码和 JWT Bearer 令牌的 OAuth25. 多个应用文件5.1 APIRouter6. BackgroundTasks7. 元数据7.1 标题、描述和版本7.2 openapi_tags 标签元数据7.3 OpenAPI URL7.4 文档 …

java json path_Java使用JSONPath解析JSON完整内容详解

JsonPath是一种简单的方法来提取给定JSON文档的部分内容。 JsonPath有许多编程语言&#xff0c;如Javascript&#xff0c;Python和PHP&#xff0c;Java。JsonPath提供的json解析非常强大&#xff0c;它提供了类似正则表达式的语法&#xff0c;基本上可以满足所有你想要获得的js…

wndows程序设计之书籍知识与代码摘录-封装一个类似printf的messagebox

//----------------------------------------- //本程序展示了如何实现MessageBoxPrintf函数 //本函数能像printf那样格式化输出 //摘录自&#xff1a;《windows程序设计第五版》 //----------------------------------------- #include<windows.h> #include<tchar.h&…

LeetCode 2050. 并行课程 III(拓扑排序)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。 同时给你一个二维整数数组 relations &#xff0c;其中 relations[j] [prevCoursej, nextCoursej] &#xff0c;表示课程 prevCoursej 必须在课程 nextCoursej 之前…

改不改,这是一个问题

概率称号&#xff1a; 给你三盒。里面放的东西。您指定&#xff0c;然后打开了另外两个。发现是空的&#xff0c;要求&#xff1a;你想改变你的选择。 答案是&#xff0c;它应该改变网上评选&#xff0c;这样的概率较大。因此&#xff0c;我要求&#xff0c;空的情况下。选择的…

LeetCode 1521. 找到最接近目标值的函数值(位运算)

文章目录1. 题目2. 解题1. 题目 Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target &#xff0c;他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。 请你返回 |func(arr, l, r) - target| 的最小值。 请注意&#xff0c; func 的输入参…

LeetCode 2053. 数组中第 K 个独一无二的字符串(哈希)

文章目录1. 题目2. 解题1. 题目 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。 给你一个字符串数组 arr 和一个整数 k &#xff0c;请你返回 arr 中第 k 个 独一无二的字符串 。 如果 少于 k 个独一无二的字符串&#xff0c;那么返回 空字符串 “” 。 注意…

java 该改变request url_如何在Java中使用servlet过滤器来更改传入的servlet请求URL?...

如何使用servlet过滤器来更改传入的servlet请求URLweb.xml至web.xml&#xff1f;更新&#xff1a;根据BalusC的以下步骤&#xff0c;我想出了以下代码&#xff1a;public class UrlRewriteFilter implements Filter {Overridepublic void init(FilterConfig config) throws Ser…