有分数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>
static 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)
{
if (sum == MAX)
{
bool f = true;
for (int 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(int 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 ;
}
static 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)
{
if (sum == MAX)
{
bool f = true;
for (int 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(int 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;
}
{
dfs(0, 0);
return 0;
}