7-1 整數分解為若干項之和(20 分)(dfs)
阿新 • • 發佈:2018-12-31
思路:不帶標記的dfs,只要沒有超過和就不斷dfs直到超過了之後向前回溯。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int a[40],k,n;
int num;
int sum;
void dfs(int x)
{
int i;
if(n == sum)
{
k++;
printf("%d=%d",n,a[0]);
for(i=1;i<num;i++)
{
printf ("+%d",a[i]);
}
if(num == 1|| k%4==0)
printf("\n");
else
printf(";");
}
if(sum > n)
return ;
for(i=x;i<=n;i++)
{
a[num++] = i;
sum += i;
dfs(i);
sum -= i;
num--;
}
}
int main()
{
num = 0 ;
sum = 0;
k = 0;
scanf("%d",&n);
dfs(1);
return 0;
}