乘式还原

题目

A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式。
    AZA
   *AAZ
----------
  AAAA
AAZZ
ZAA
----------
ZAZAA

输出格式要求:
" %d "
"* %d%d "
"........................ "
" %d "
" %d "
"........................ "
" %d "

程序运行示例如下:
    372
   *246
----------
  2232
1488
744
----------
91512

暴力解法思路

  1. 首先,穷举了这两个三位数的所有可能性:通过观察可以得到进行相乘的是两个三位数,也就是六个数字,使用六个嵌套循环,每个循环穷举一个位的所有可能性(如果是A就是04,如果是Z就是59)。
  2. 再者,判断乘式中间部分的每个表达式是否满足A在04且Z在59:将第一个三位数分别与第二个三位数的个位、十位、百位相乘,得到三个值,分离这三个值的每一位,并将每一位对照乘式判断是否满足条件。
  3. 最后,判断乘式末尾部分表达式是否满足A在04且Z在59:将第二步算出的三个值相加得到一个新的值,分离这个新值的每一位,判断新值的每一位是否满足条件。

程序代码(C语言)

#include <stdio.h>
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
", A, B, C);
                                            printf("   *%d%d%d
", D, E, F);
                                            printf("----------
");
                                            printf("  %d%d%d%d
", fi1, fi2, fi3, fi4);
                                            printf(" %d%d%d%d 
", se1, se2, se3, se4);
                                            printf(" %d%d%d   
", th1, th2, th3);
                                            printf("----------
");
                                            printf("%d%d%d%d%d
", sum1, sum2, sum3, sum4, sum5);
                                            printf("");
                                        }
                                    }
                                }
                            }
                        }
}

原文地址:https://www.cnblogs.com/maskwolf/p/10018935.html