1.递归思想
2.如何控制分数的检查
将1-9这9个数字,分别填入到下面公式的括号中,满足数字不能重复,分母不能为1,并且要求分子分母没有除了1以外的公因数。
#include <stdio.h>
#define N 9
int num[9] = {0};
int visit[9] = {0};
int gcd(int a,int b)
{
if(a < b)
return gcd(b,a);
else if(a % b == 0)
return b;
else
return gcd(b,a%b);
}
void print()
{
printf("%d%d/%d + %d%d/%d = %d%d/%d\n",num[0],num[1],num[2],num[3],num[4],num[5],num[6],num[7],num[8]);
}
void generate(int k)
{
int m,n,d;
for(int i = 1;i <= (N-k)/3;i++)
{
m = num[i*3-3]*10+num[i*3-2];
n = num[i*3-1];
if(n == 1)
return;
if(gcd(m,n) != 1)
return;
}
if(k == 0)
{
m = (num[0] * 10 + num[1]) * num[5] + (num[3] * 10 + num[4]) * num[2];
n = num[2] * num[5];
d = gcd(m,n);
m = m/d;
n = n/d;
if(num[6]* 10 + num[7] != m || n != num[8])
return;
print();
return;
}
for(i = 0;i < 9;i++)
{
if(visit[i])
continue;
visit[i] = 1;
num[N-k] = i+1;
generate(k-1);
visit[i] = 0;
}
}
void main()
{
generate(N);
}