C趣味程序百例(21)除式還原(1)

字號:

66.除式還原(1)
     給定下列除式,其中包含5個7,其它打×的是任意數(shù)字,請加以還原。
     × 7 × --------------商
     --------------
     除數(shù)------××| ×××××-------------被除數(shù)
     ×7 7
     --------------
     × 7 ×
     × 7 ×
     ----------
     × ×
     × ×
     ----------
     ○
    *題目分析與算法設(shè)計
     首先分析題目,由除式本身盡可能多地推出已知條件。由除式本身書已知:
     1、被除數(shù)的范圍是10000到99999,除數(shù)的范圍是10到99,且可以整除;
     2、商為100到999之間,且十位數(shù)字為7;
     3、商的第一位與除數(shù)的積為三位數(shù),且后兩位為77;
     4、被除數(shù)的第三位一定為4;
     5、 7乘以除數(shù)的積為一個三位數(shù),且第二位為7;
     6、商的最后一位不能為0,且與除數(shù)的積為一個二位數(shù)。
    由已知條件就可以采用窮舉的方法找出結(jié)果。
    *程序與程序注釋
    #include
    void main()
    {
     long int i;
     int j,l;
     for(i=10000;i<=99999;i++) /*1. i:被除數(shù)*/
     if(i%1000-i%100==400) /*4. 被除數(shù)的第三位一定為4*/
     for(j=10;j<=99;j++) /*1. j: 余數(shù)*/
     if(i%j==0&&(l=i/j)%100>=70&&l%100<80&&l%10!=0&&l>100&&l<=999)
     /*1. 可以整除&& 2.商l在100到999之間且十位數(shù)字為7&&6.商的個數(shù)不能為0*/
     if((j*(l%10))<100&&j*(l%10)>10) /*6. 商的個數(shù)與除數(shù)的積為二位數(shù)*/
     if(j*7%100>=70&&j*7%100<80) /*5. 7乘以除數(shù)的積的第二位為7*/
     if(j*(l/100)%100==77&&j*(l/100)>100)
     /*商的第一位與除數(shù)的積的后兩位為77*/
     printf("%ld/%ld=%d\n",i,j,l);
    }
    *運行結(jié)果
     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
     -----------
     ○