题目
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
代码
#include<stdio.h>
#include<stdlib.h>
#define N 100
void Print();
void find(int max,int start,int index);
int x,a[N],cnt=0;
void main(){
int i;
for(i=0;i<N;i++)
a[i]=0;
printf("输入x\n");
scanf("%d",&x);
find(x,1,0);
system("pause");
}
void find(int max,int start,int index){//回溯算法,
int i;
if(!max){
Print();
return;
}
for(i=start;i<=max;i++){//核心算法
a[index]=i;
find(max-i,i,index+1);
a[index]=0;//回溯
}
}
void Print(){
int count=0;
cnt++;
printf("%d=",x);
while(a[count]){
printf("%d",a[count]);
if(a[count+1])
printf("+");
count++;
}
if(cnt%4==0){
printf("\n");
cnt=0;
}else
printf("; ");
}