有分数1/2,1/3,1/4,1/5,1/6,1/8,1/10,1/12,1/15,求将其中若干个分数相加和恰好为1的组成方案,并打印成等式。例如:
1. 1/2+1/3+1/6=1
2. 。。。。。。
代码
#include <stdio.h>
typedef enum
{
true=1,false=0
}bool;
int MAX = 120; //所有分母的最小公倍数
int a[9][2] = {{60,0},{40,0},{30,0},{24,0},{20,0},{15,0},{12,0},{10,0},{8,0}}; //各种数字组合的公倍数
void dfs(int sum, int step)
{
int i=0;
if (sum == MAX)
{
bool f = true;
for ( i = 0; i < 9; i++)
{
if (a[i][1] == 1)
{
if (f == false)
{
printf("+");
}
f=false;
printf("1/%d",120/a[i][0]);
}
}
printf("=1\n");
return ;
}
for( i = step; i < 9; i++)
{
if (sum + a[i][0] <= 120)
{
a[i][1] = 1;
dfs(sum + a[i][0], i + 1);
a[i][1]= 0;
}
}
return ;
}
int main()
{
dfs(0, 0);
return 0;
}