main() // 我的主要思路就是首先将三个分别用三个函数写出来,然后再在主函数里调用。
{
func1();
func3();
func2();
}
int func1() // 三个调用函数的思路是一致的,所以我就介绍第一种形式。
{
int x,i,j,n,a,b,c,d,e,f,g,h,m,p,k,q,cont;
int v[9];
for (n = 5; n < 795; n++) //遍历所有可能的n值
for (x = 1; x < 10 && x < n; x++) // 遍历加号前面的值
for (i = 1000; i < 9999; i++) // 遍历分母的值
{j = (n - x) * i; //j:分母
if(j < 9999)
{
cont = 0;
a = i / 1000;
b = i / 100 % 10;
c = i / 10 % 10; //将分母的各位上的数表示出来
d = i % 10;
e = j / 1000;
f = j / 100 % 10;
g = j / 10 % 10; //将分子上的各位数表示出来
h = j % 10;
int v[9] = {x,a,b,c,d,e,f,g,h};
for(m = 0; m < 9; m++)
{
q = v[m];
for (k = m + 1; k < 9; k ++)
{
p = v[k];
if(q!=p)
{
cont++; // 判断这九个数不是重复的
}
}
if (cont == 36 && x*a*b*c*d*e*f*g*h == 362880 && x+a+b+c+d+e+f+g+h==45) //判断是否为一到九
{
printf ("%4d=%d %d%d%d%d/%d%d%d%d\n",n,x,e,f,g,h,a,b,c,d);
break;
}
}
}
}
}
总结:有时候可以逆向思维,既然无法将一到九九个数排列的所有可能表示出来,那就判断最终的这几位是否满足一到九不重复。