您的位置:首页 > 其它

整数划分问题

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

用递归做!

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: