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 ("M=%d %d%d%d%d/%d%d%d%d\n",n,x,e,f,g,h,a,b,c,d); break; } } } } }
总结:有时候可以逆向思维,既然无法将一到九九个数排列的所有可能表示出来,那就判断最终的这几位是否满足一到九不重复。