整数划分问题
2018-03-29 08:07
330 查看
整数可被划分为形如
6=5+1
6=4+2
6=1+1+1+1+1+1
求出所有的划分
2+4 和4+2是一样的,按要求输出4+2
用递归做!
6=5+1
6=4+2
6=1+1+1+1+1+1
求出所有的划分
2+4 和4+2是一样的,按要求输出4+2
用递归做!
#include <stdio.h> int t; int mark[100]={0}; void part(int now,int deep,int last){ if(now>t) return;//累加值大于t,返回,不继续查找 if(now==t){ int flag=0; printf("%d = ",t); int i; for(i=0;i<=deep-1;i++){ if(flag==0){ printf("%d",mark[i]); flag=1; } else printf("+%d",mark[i]); } printf("\n"); } else{ int i; for(i=last;i>=1;i--){ mark[deep]=i;//记录当前节点 now+=i;//计算累加值 part(now,deep+1,i);//调用函数再次查找,找到就输出,找不到就返回 now-=i;//返回后now复原,进入下一个循环 } } } int main(){ scanf("%d",&t); part(0,0,t-1);//从t-1开始 return 0; }