算法:乘式还原

乘式还原。

 

代码:

#include 
int main(void)
{
  int A,B,C,D,E,F,fi,se,th,fi1,fi2,fi3,fi4,se1,se2,se3,se4,th1,th2,th3,sum=0,sum1,sum2,sum3,sum4,sum5;
  for(A=1;A<=4;A++)
    for(B=5;B<=9;B++)
      for(C=0;C<=4;C++)
        for(D=1;D<=4;D++)
          for(E=0;E<=4;E++)
            for(F=5;F<=9;F++)
            {
              fi=(A*100+B*10+C)*F;
              se=(A*100+B*10+C)*E;
              th=(A*100+B*10+C)*D;
              fi1=fi/1000;
              fi2=fi/100%10;
              fi3=fi/10%10;
              fi4=fi%10;
              se1=se/1000;
              se2=se/100%10;
              se3=se/10%10;
              se4=se%10;
              th1=th/100;
              th2=th/10%10;
              th3=th%10;
              if(fi1>=1 && fi1<=4 && fi2<=4 && fi3<=4 && fi4<=4)
                if(se1>=1 && se1<=4 && se2<=4 && se3>=5 && se4>=5)
                  if(th1>=5 && th2<=4 && th3<=4)
                  {
                    sum=(A*100+B*10+C)*(D*100+E*10+F);
                    sum1=sum/10000;
                    sum2=sum/1000%10;
                    sum3=sum/100%10;
                    sum4=sum/10%10;
                    sum5=sum%10;
                    if(sum1>=5 && sum2<=4 && sum3>=5 && sum4<=4 && sum5<=4)
                    {
                      printf("    %d%d%d\n",A,B,C);
                      printf("   *%d%d%d\n",D,E,F);
                      printf("----------\n");
                      printf("  %d%d%d%d\n",fi1,fi2,fi3,fi4);
                      printf(" %d%d%d%d \n",se1,se2,se3,se4);
                      printf(" %d%d%d   \n",th1,th2,th3);
                      printf("----------\n");
                      printf("%d%d%d%d%d\n",sum1,sum2,sum3,sum4,sum5);
                      printf("");
                    }
                  }
            }
}

 

运行结果:

    372
   *246
----------
  2232
 1488
 744
----------
91512
 
--------------------------------
Process exited after 0.4223 seconds with return value 6
请按任意键继续. . .

 

题目:
乘式还原
A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式:

      A  Z  A
     *A  A  Z
--------------
   A  A  A  A
A  A  Z  Z
Z  A  A
--------------
Z  A  Z  A  A

 

我的思路:
0X01:先用上面的AZA乘以下面整数的个位A,得到 AAAA。
0X02:然后用上面的AZA乘以下面整数的十位Z,得到AAZZ。
0X03:然后用上面的AZA乘以下面整数的百位A,得到ZAA。
0X04:现在,我们要保证AAAA、AAZZ、ZAA的每一位符合它的范围。比如A>=0 && A<=4,Z>=5 && Z<=9,要这样去判断。
0X05:如果上面条件成立,那就把这几个数加起来,或者用那个被乘数乘以乘数,也就是AZA*AAZ,得到积。
0X06:继续判断积的每一位数是否符合它的范围,如果符合,那么这就是一个符合题目要求的结果。

 

总结:
这个题目有点繁琐,基本思路不难。只要符合所有的条件即可。

你可能感兴趣的:(算法)