C趣味程序百例(18)1~9分成1:2:3的三個3位數(shù)

字號:

60.1~9分成1:2:3的三個3位數(shù)
     將1到9 這九個數(shù)字分成三個3位數(shù),分求第一個3位數(shù),正好是第二個3位數(shù)的二倍,是第三個3位數(shù)的三倍。問應當怎樣分法。
    *問題分析與算法設計
     問題中的三個數(shù)之間是有數(shù)學關系的,實際上只要確定第一個三位數(shù)就可以解決問題。
     試探第一個三位數(shù)之后,計算出另外兩個數(shù),將其分別分解成三位數(shù)字,進行判斷后確定所試探的數(shù)是否就是答案。
     需要提醒的是:試探的初值可以是123,值是333。因為不可能超出該范圍。
    *程序與程序設計
    #include
    int ok(int t,int *z);
    int a[9];
    void main()
    {
     int m,count=0;
     for(m=123;m<=333;m++) /*試探可能的三位數(shù)*/
     if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6)) /*若滿足題意*/
     printf("No.%d: %d %d %d\n",++count,m,2*m,3*m); /*輸出結果*/
    }
    int ok(int t,int *z) /*分解t的值,將其存入z指向的三個數(shù)組元素,若滿足要求返回1*/
    {
     int *p1,*p2;
     for(p1=z;p1     {
     *p1=t%10; /*分解整數(shù)*/
     t/=10;
     for(p2=a;p2     if(*p1==0||*p2==*p1)return 0; /*若重復則返回*/
     }
     return 1; /*否則返回1*/
    }
    *運行結果
     No.1:192 384 576
     No.2:219 438 657
     No.3:273 546 819
     No.4:327 654 981
    *思考題
     求出所有可能的以下形式的算式,每個算式中有九個數(shù)位,正好用盡1到9這九個數(shù)字。
     1)○○○+○○○=○○○ (共有168種可能的組合)
     2)○×○○○○=○○○○ (共有2種可能的組合)
     3)○○×○○○=○○○○ (共有7種可能的組合)
     4)○×○○○=○○×○○○ (共有13種可能的組合)
     5)○×○○○=○×○○○○ (共有28種可能的組合)
     6)○○×○○=○×○○○○ (共有7種可能的組合)
     7)○○×○○=○○×○○○ (共有11種可能的組合)