递归求解整数划分问题 分类: 算法 2014-09-25 21:37 158人阅读 评论(0) 收藏
2014-09-25 21:37
696 查看
定义一个数组dnum用来存储一个划分中的每个数,用show函数来对一次划分进行一次输出,运用递归的方法进行整数的划分,递归的时时候考虑5种情况,分别是n<m,n=m,n>m>1, n>= 1>=m和 0=<n <=m <=1的情况。本程序没有考虑负整数的情况,对于负整数的情况只需要增加一个判断变量flag,flag=1时是负整数,此时稍微增加一下对应的输出函数即可。
/* Subject:计算机算法设计与分析 Title:整数划分问题:输出一个整数的所有划分并统计总划分数 Coder:learnordie Date:Sept 11th,2014 */ /* 算法思路: 定义一个数组dnum用来存储一个划分中的每个数,运用递归的方法进行整数的划分 */ #include<stdio.h> #include<stdlib.h> #include<math.h> //show函数用于将dnum数组中存储的一个整数划分输出 //dnum中存储的是一次整数划分后的各个数,len为这次整数划分好的各数的数目和 void show(int *dnum,int len){ int i; printf("%d=",dnum[0]); if(len == 1) { printf("%d",dnum[1]); } else { for(i=1;i<len-1;i++){ printf("%d+",dnum[i]); } } printf("%d\n",dnum[len-1]); } //递归划分整数,n为待划分的整数,m为最大加数上限 int q(int n,int m,int *dnum,int len){ // n <= m <= 1 或 n<= 1 <= m 的情况 //当n>=1并且m=1时,q(n,m,result,length)=q(n-1,m,result,length) //当n=0并且m=1时,输出 //当n=1并且m>1时,输出 if(n>=0 && m==1){ if(n==0){ show(dnum,len); } else { dnum[len] = 1; q(n-1,m,dnum,len+1); } return 1; } else if(n==1 && m>1){ dnum[len] = n; show(dnum,len+1); return 1; } //当n<m时候的情况 else if(n<m){ return q(n,n,dnum,len); } //当n=m时候的情况 else if(n==m){ dnum[len] = m; show(dnum,len+1); return q(n,m-1,dnum,len)+1; } //当n>m>1时候的情况 else{ dnum[len] = m; return q(n-m,m,dnum,len+1) + q(n,m-1,dnum,len) ; } } void main(){ int dnum[100]={0}; int t,len; len = 1; printf("please enter the number:"); scanf("%d",dnum); printf("the result is:\n"); t=q(dnum[0],dnum[0],dnum,len); printf("the number is:%d\n",t); system("pause"); }
相关文章推荐
- 求数组中出现1,2次数问题的讨论 分类: 算法 2014-12-06 09:28 81人阅读 评论(0) 收藏
- C# 数组排序 基本算法 分类: C# 2014-09-25 15:43 129人阅读 评论(0) 收藏
- 【C++ STL】算法 <algorithm>中各种算法解析 分类: C/C++ 数据结构与算法 2015-07-07 21:37 22人阅读 评论(0) 收藏
- 用C求解一元二次方程的解,遇到的问题及解决办法 分类: C语言 2012-03-13 00:26 3094人阅读 评论(0) 收藏
- 深入N皇后问题的两个最高效算法的详解 分类: C/C++ 2014-11-08 17:22 117人阅读 评论(0) 收藏
- STL vector用法介绍 分类: 算法 2014-09-25 22:29 86人阅读 评论(0) 收藏
- 存储器的寻址问题 分类: 计算机组成原理 2011-04-04 23:24 477人阅读 评论(0) 收藏
- 枚举作为整数 分类: H_HISTORY 2013-02-08 11:22 576人阅读 评论(0) 收藏
- 遇到的问题总结 分类: 问题总结 2013-10-28 17:21 263人阅读 评论(0) 收藏
- UTF8默认编码下的MYSQL命令框中输入汉字显示乱码的问题 分类: 测试 2013-08-02 14:16 371人阅读 评论(0) 收藏
- Pyscripter下载地址及UnicodeEncodeError: 'ascii' codec解决方法 分类: software 问题总结 2013-01-16 15:41 3384人阅读 评论(0) 收藏
- 删除列表元素时需注意的问题 分类: python基础学习 python 小练习 2013-10-09 14:02 293人阅读 评论(0) 收藏
- MySQL 解决ERROR 1045 (28000): Access deniedfor user datam@localhost (using password: YES)的问题 分类: database 2013-09-12 15:52 402人阅读 评论(0) 收藏
- Fragment之三:根据屏幕尺寸加载不同的Fragment 分类: H1_ANDROID 2013-11-15 21:37 1162人阅读 评论(0) 收藏
- 个人碰到的简单问题处理,慢慢总结 分类: ubuntu学习 2013-08-12 10:36 385人阅读 评论(0) 收藏
- 经典算法2:递归求解整数划分
- 如何解决安卓SDK无法下载Package的问题 分类: H1_ANDROID 2013-09-09 10:26 1199人阅读 评论(0) 收藏
- 线性表几个基本算法 分类: 编程 2013-03-19 09:26 171人阅读 评论(0) 收藏
- String 匹配算法(2)---第32章 分类: 算法导论 2011-03-03 10:55 163人阅读 评论(0) 收藏
- 解决glib2.0缺失问题 分类: LINUX 2012-01-12 23:17 590人阅读 评论(0) 收藏