除式还原

给定下列除式,其中包含5个7,其它打×的是任意数字,请加以还原。

                                  ×  7  × --------------商
                      -----------------------
除数-------×  × |  ×  ×  ×  ×  ×-------------被除数
                          ×  7  7
                      -------------------------
                              ×  7  ×
                              ×  7  ×
                        -------------------
                                      ×  ×
                                      ×  ×
                         -----------------

*问题分析与算法设计
首先分析题目,由除式本身尽可能多地推出已知条件。由除式本身书已知:
1、被除数的范围是10000到99999,除数的范围是10到99,且可以整除;
2、商为100到999之间,且十位数字为7;
3、商的第一位与除数的积为三位数,且后两位为77;
4、被除数的第三位一定为4;
5、 7乘以除数的积为一个三位数,且第二位为7;
6、商的最后一位不能为0,且与除数的积为一个二位数。
由已知条件就可以采用穷举的方法找出结果。

*程序说明与注释

#include<stdio.h>
int main()
{
long int i;
int j,l;
for(i=10000;i<=99999;i++) /*1. i:被除数*/
if(i%1000-i%100==400) /*4. 被除数的第三位一定为4*/
for(j=10;j<=99;j++) /*1. j: 余数*/
if(i%j==0&&(l=i/j)%100>=70&&l%100<80&&l%10!=0&&l>100&&l<=999)
/*1. 可以整除&& 2.商l在100到999之间且十位数字为7&&6.商的个数不能为0*/
if((j*(l%10))<100&&j*(l%10)>10) /*6. 商的个数与除数的积为二位数*/
if(j*7%100>=70&&j*7%100<80) /*5. 7乘以除数的积的第二位为7*/
if(j*(l/100)%100==77&&j*(l/100)>100)
/*商的第一位与除数的积的后两位为77*/
printf("%ld/%ld=%d\n",i,j,l);
}

*运行结果
51463/53=971。 
可以看作为下列算式:

                                 9  7  1
                       --------------------
                5  3 | 5  1  4  6  3
                         4  7  7
                         -------------
                             3  7  6
                             3  7  1
                             -----------
                                     5  3
                                     5  3
                               -----------

*问题的进一步讨论
在推出的已知条件中,几所有的条件都是十分明显的,换句话说,推出的已知条件就是对题目的平铺直叙。这种推已知条件的方法十分简单,并且行之有效。

posted @ 2020-05-29 18:52  熊小雯  阅读(281)  评论(0)    收藏  举报