2015年9月9日 星期三

演算法訓練 10 ─ 幾 A 幾 B

http://4rdp.blogspot.com/2015/09/10-b.html

在學生時代應該沒有人沒玩過猜數字遊戲,就是兩個人互猜數字,比賽誰先猜到誰就獲勝,每個人先寫下讓別人猜測的數字,但是要保密不能讓對方知道,通常數字為四位數,每位數字是不重複的,有的遊戲是不含零,猜數字的人報出數值後,對方須答覆有多少數字號碼對位置也對,這稱為 A,以及數字對但是位置錯誤,這稱為 B。

大家試寫程式看看,設計讓電腦自動猜數字。



順便猜猜看左圖數字多少 (不含零)。

13 則留言:

  1. 路過來解一下,1749
    --
    有好多不錯的文章
    可惜我還是太淺了
    很多還看不是很懂

    回覆刪除
    回覆
    1. 4A,厲害一次答對。
      謝謝你對本部落格的讚許,如果願意指出對那些文章有興趣,很樂意答覆你的疑問。

      刪除
    2. 有沒有猜的方法,是如何猜出1749而非1794

      刪除
    3. Shingnok,

      1794 不符第一輪的條件。

      刪除
  2. 國三資訊課程,學生有接觸APP Inventor,有一個專題就是做xAxB...

    回覆刪除
    回覆
    1. APP Inventor 是很棒的軟體,適合Android 手機或平板程式設計入門,老師目前也有開這方面的課程嗎?我也好奇,現在國一二的學生,有資訊課程嗎?上甚麼課?

      刪除
    2. 資訊課程,理論的資安主題,著作權主題。
      軟體應用,安排影像編輯軟體photoimpact、GoogleSketchup畫室內設計圖、二年級整年度我是以製造科技為主題,以PLC可程式模擬軟體,進行單元主題的程序控制(學生學習程式的撰寫,進而控制模擬中的物件,如機械手臂。)
      三年級則以手機app及Scratch編輯開發簡易手機或單機版的應用程式。

      刪除
    3. 讚!科技的進步與日俱進,這一代比我們幸福有好多高科技的東西可以用,同時也比我們辛苦要學好多東西,老師備課辛苦了。

      刪除
  3. 高二學VB學的0066,一知半解,到大學才真的學到皮毛
    沒想到現在國中就有AI和PLC
    想到我國中是WIN95的年代
    那時後的資訊課是學編輯軟體和偷上巴哈姆特
    好懷念的時後喔(茶)

    回覆刪除
  4. 您好,

    以前剛學東西時,也是矇矇懂懂,我是因為常常自己找專題試作,才逐漸搞懂許多事情,希望這個園地能給初學者或進階者一些幫助。

    回覆刪除
  5. 不是什麼東西都適合用程式求解

    底下程式已驗證過, 可求得正確解, 因字數限制, 分成兩段
    #include

    int main(void)
    {

    int i, j, k, l;
    int sum;

    for(i=1;i<=9;i++)
    for(j=1;j<=9;j++)
    for(k=1;k<=9;k++)
    for(l=1;l<=9;l++)
    {

    sum=\
    ((i==1 && j!=1 && k!=1 && l!=1 && j!=2 && k!=3 && l!=4 &&\
    ((k==2 || l==2)||(j==3 || l==3)||(j==4 || k==4)))|| \
    (j==2 && i!=2 && k!=2 && l!=2 && i!=1 && k!=3 && l!=4 &&\
    ((i==4 || k==4)||(i==3 || l==3)||(k==1 || l==1)))|| \
    (k==3 && i!=3 && j!=3 && l!=3 && i!=1 && j!=2 && l!=4 &&\
    ((i==4 || j==4)||(i==2 || l==2)||(j==1 || l==1)))|| \
    (l==4 && i!=4 && j!=4 && k==4 && i!=1 && j!=2 && k!=3 &&\
    ((i==3 || j==3)||(i==2 || k==2)||(j==1 || k==1))))&& \
    \
    (i!=5 && j!=6 && k!=1 && l!=2 && \
    ((j==5 && i!=1 && i!=2 && i!=6 && k!=1 && k!=2 && k!=6 && l!=1 && l!=2 && l!=6) ||\
    (k==5 && i!=1 && i!=2 && i!=6 && j!=1 && j!=2 && j!=6 && l!=1 && l!=2 && l!=6) ||\
    (l==5 && i!=1 && i!=2 && i!=6 && j!=1 && j!=2 && j!=6 && k!=1 && k!=2 && k!=6) ||\
    (i==6 && j!=1 && j!=2 && j!=5 && k!=1 && k!=2 && k!=5 && l!=1 && l!=2 && l!=5) ||\
    (k==6 && i!=1 && i!=2 && i!=5 && j!=1 && j!=2 && j!=5 && l!=1 && l!=2 && l!=5) ||\
    (l==6 && i!=1 && i!=2 && i!=5 && j!=1 && j!=2 && j!=5 && k!=1 && k!=2 && k!=5) ||\
    (i==1 && j!=2 && j!=5 && j!=6 && k!=2 && k!=5 && k!=6 && l!=2 && l!=5 && l!=6) ||\
    (j==1 && i!=2 && i!=5 && i!=6 && k!=2 && k!=5 && k!=6 && l!=2 && l!=5 && l!=6) ||\
    (l==1 && i!=2 && i!=5 && i!=6 && j!=2 && j!=5 && j!=6 && k!=2 && k!=5 && k!=6) ||\
    (i==2 && j!=1 && j!=5 && j!=6 && k!=1 && k!=5 && k!=6 && l!=1 && l!=5 && l!=6) ||\
    (j==2 && i!=1 && i!=5 && i!=6 && k!=1 && k!=5 && k!=6 && l!=1 && l!=5 && l!=6) ||\
    (k==2 && i!=1 && i!=5 && i!=6 && j!=1 && j!=5 && j!=6 && k!=1 && k!=5 && k!=6)))&&\

    回覆刪除
  6. \
    ((i==1 && j!=1 && k!=1 && l!=1 && j==7 && i!=7 && k!=7 && l!=7 && \
    i!=8 && j!=8 && k!=8 && l!=8 && i!=3 && j!=3 && k!=3 && l!=3)|| \
    (i==1 && i!=1 && i!=1 && i!=1 && k==8 && i!=8 && j!=8 && l!=8 && \
    i!=7 && j!=7 && k!=7 && l!=7 && i!=3 && j!=3 && k!=3 && l!=3)|| \
    (i==1 && j!=1 && k!=1 && l!=1 && l==3 && i!=3 && j!=3 && k!=3 && \
    i!=7 && j!=7 && k!=7 && l!=7 && i!=8 && j!=8 && k!=8 && l!=8)|| \
    (j==7 && i!=7 && k!=7 && l!=7 && k==8 && i!=8 && j!=8 && l!=8 && \
    i!=1 && j!=1 && k!=1 && l!=1 && i!=3 && j!=3 && k!=3 && l!=3)|| \
    (j==7 && i!=7 && k!=7 && l!=7 && l==3 && i!=3 && j!=3 && k!=3 && \
    i!=1 && j!=1 && k!=1 && l!=1 && i!=8 && j!=8 && k!=8 && l!=8)|| \
    (k==8 && i!=8 && j!=8 && l!=8 && l==3 && i!=3 && j!=3 && k!=3 && \
    i!=1 && j!=1 && k!=1 && l!=1 && i!=7 && j!=7 && k!=7 && l!=7))&& \
    \
    (i!=9 && j!=2 && k!=8 && l!=3 && \
    ((j==9 || k==9 || l==9)||(i==2 || k==2 || l==2)||(i==8 || j==8 || l==8)||(i==3 || j==3 || k==3)));

    if (sum)
    printf("i = %d, j = %d, k = %d, l = %d\n",i,j,k,l);
    }
    return 0;
    }

    回覆刪除
    回覆
    1. 謝謝您又提供程式碼,它確實會解出 1749,顯然你已找出解題的邏輯,不過把本題範例定值寫在程式碼中,不是較佳作法,當題目數值更動,這個程式碼勢必大幅修改,如果可以設計出泛用的程式,那表示你的程式設計功力又再進一級。

      請問您主修甚麼科系?

      刪除