整数划分结果输出.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
整数划分结果输出

方法一: #include stdio.h int a[100]={0}; void shuchu(int m) { int i; for(i=0;i=m-1;i++) printf(%d ,a[i]); printf(\n); } void fenjie(int n,int m) { int i; if(n==0) shuchu(m); else for(i=n;i=1;i--) if(m==0||i=a[m-1]) {a[m]=i;fenjie(n-i,m+1);} } void main(void) { int n,i,m=0; printf(please input a number(0n100): ); scanf(%d,n); fenjie(n,m); } 方法二: /* 整数的划分问题。 如,对于正整数n=6,可以分划为: 6 5+1 4+2, 4+1+1 3+3, 3+2+1, 3+1+1+1 2+2+2, 2+2+1+1, 2+1+1+1+1 1+1+1+1+1+1+1 现在的问题是,对于给定的正整数n,编写算法打印所有划分。 用户从键盘输入 n (范围1~10) 程序输出该整数的所有划分。 */ #includestdio.h #includestring.h //计算划分种数 int divideNumber(int n,int m) { if(m==1 || n==1) return 1; if(nm) return divideNumber(n,n); else if(n==m) return divideNumber(n,m-1)+1; else return divideNumber(n-m,m)+divideNumber(n,m-1); } //输出划分结果 void divide(char *s,int first,int other) { int i; static char t[50];//保存上一次的输出结果 char temp[50],str[3]={0}; if(other==0){ if(s[0]==t[0]) printf(,%s,s); else printf(%s,s); strcpy(t,s); } for(i=other;i=1;i--){ if(ifirst) continue; strcpy(temp,s); str[0]=+; str[1]=i+0; strcat(s,str); divide(s,i,other-i); strcpy(s,temp); } } void main() { int i; int n; char s[50]={0}; char str[3]={0}; scanf(%d,n); printf(划分种数:%d\n,divideNumber(n,n)); for(i=n;i=1;i--){ if(i==n) printf(%d,n); else{ s[0]=0; str[0]=0+i; strcat(s,str); divide(s,i,n-i); } puts(); } }

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档