2014年8月13日 星期三

訓練數學感 29 ─ 數字 1 到 9

http://4rdp.blogspot.com/2014/08/29-1-9.html?m=0


請填寫數字 1 到 9 於空格中不能重覆,使上面等式成立。

這題題目,是從數學愛好者 FB 看到,很適合寫程式破解,留給學程式設計的朋友練習。

8 則留言:

  1. 8/12+9/36+7/54=1,
    我是先判斷分母要盡量小,分子盡量大,然後分母擺12,34,56太難計算,
    所以改成12,36,54試試看,分子依序放9,8,7,算出來略大於1,
    再自己調整順序湊出來的。
    不知有沒有更漂亮的解法...

    回覆刪除
    回覆
    1. 目前還想不出有甚麼比「程式暴力解」更好的方法,我關注的問題,這種題目有多少種解?這些解之間是否有關連?還有那些方法可以解問題?
      對了,你會寫程式嗎?如果會的話,爆解這種問題就易如反掌。另外,OEIS 申請好了嗎?

      刪除
  2. 我不會寫程式,哈。
    OEIS申請好了,Chiang, Tung-Ying,但我不知道他通過沒。

    回覆刪除
    回覆
    1. 已經申請通過,如果你會程式設計,我想以你數學資質,簡直如虎添翼。

      刪除
  3. 只有一個解 5/34 + 7/68 + 9/12=1

    答案 8/12+9/36+7/54=1 是錯的

    回覆刪除
  4. 謝謝指正,你是怎樣找到答案的?
    對了,你會覺得訓練數學感這系列題目太難或是簡單?

    回覆刪除
  5. C 語言程式碼

    #include

    int main(void)
    {

    int a1,a2,a3,a4,a5,a6,a7,a8,a9;
    int n=0;

    for(a1=1;a1<10;a1++)
    for(a2=1;a2<10;a2++)
    for(a3=1;a3<10;a3++)
    for(a4=1;a4<10;a4++)
    for(a5=1;a5<10;a5++)
    for(a6=1;a6<10;a6++)
    for(a7=1;a7<10;a7++)
    for(a8=1;a8<10;a8++)
    for(a9=1;a9<10;a9++)
    {
    if( (a1*(a5*10+a6)*(a8*10+a9)+a4*(a2*10+a3)*(a8*10+a9)+a7*(a2*10+a3)*(a5*10+a6) == (a2*10+a3)*(a5*10+a6)*(a8*10+a9))&&\
    (\
    a2!=a1 &&\
    a3!=a2 && a3!=a1 &&\
    a4!=a3 && a4!=a2 && a4!=a1 &&\
    a5!=a4 && a5!=a3 && a5!=a2 && a5!=a1 && \
    a6!=a5 && a6!=a4 && a6!=a3 && a6!=a2 && a6!=a1 &&\
    a7!=a6 && a7!=a5 && a7!=a4 && a7!=a3 && a7!=a2 && a7!=a1 &&\
    a8!=a7 && a8!=a6 && a8!=a5 && a8!=a4 && a8!=a3 && a8!=a2 && a8!=a1 && \
    a9!=a8 && a9!=a7 && a9!=a6 && a9!=a5 && a9!=a4 && a9!=a3 && a9!=a2 && a9!=a1 \
    )
    )

    {
    n=n+1;
    printf("a1=%d, a2=%d, a3=%d, a4=%d, a5=%d, a6=%d, a7=%d, a8=%d, a9=%d, n=%d\n",a1,a2,a3,a4,a5,a6,a7,a8,a9,n);
    }
    }
    return 0;
    }

    回覆刪除
  6. 讚!謝謝提供程式碼。

    回覆刪除