5.4

xiaoxiao2021-02-27  316

#include <stdio.h>                // 将一到九分成三种分数形式,每个数字只能用一次,使得该分数刚好等于一个整数,如N= X+XXXX/XXXX  N=X+XXXXX/XXX N=XX+XXXX /XXX                                                                                                                                                                               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 ("M=%d  %d%d%d%d/%d%d%d%d\n",n,x,e,f,g,h,a,b,c,d);                       break;                   }                 }              }         } }

  总结:有时候可以逆向思维,既然无法将一到九九个数排列的所有可能表示出来,那就判断最终的这几位是否满足一到九不重复。

转载请注明原文地址: https://www.6miu.com/read-13036.html

最新回复(0)