JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 程式分享區 » 數獨、猜數字  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [猜數字系列]深綠...猜數字程式
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-02-28 03:06 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
這個程式是以前我大二上的時候寫的猜數字程式
是電腦猜人,不是人猜電腦
那時候還拿來騙別人....傳訊息給別人說"要不要玩猜數字"?
然後用這個程式去猜....勝場無數,哈哈~
不過有個厲害的高中同學竟然玩了二次都猜贏深綠...
看來這個程式的進步空間還很大,就留待有緣人改造它了
演算法說穿了根本沒什麼了不起的...brute-force...:D

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import java.io.*;
public class GuessNumber {
  
  private int[] answerSet = new int[10*9*8*7];
  public GuessNumber() {
    int index=0;
    for (int n1=0; n1<10; n1++) {
      for (int n2=0; n2<10; n2++) {
        if ( n2 == n1) continue;
        for (int n3=0; n3<10; n3++) {
          if (n3 == n2 || n3 == n1 ) continue;
          for (int n4=0; n4<10; n4++) {
            if ( n4==n1 || n4==n2 || n4==n3) continue;
            answerSet[index++] = n1*1000+n2*100+n3*10+n4;
          }
        }
      }
    }
    guess();
  }
 
  private void input(int number) {
    System.out.print( transform(number) + ", ?A?B = ");
    int a=0,b=0;
    try {
      BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
      String str  = br.readLine();
      while ( str.length() != 4 ) {
        System.out.println("輸入錯誤, 格式為 ?A?B ");
        System.out.print( transform(number) + ", ?A?B = ");
        str = br.readLine();
      }
      a = str.charAt(0) - '0';
      b = str.charAt(2) - '0'; 
    }
    catch (IOException e) {
      System.out.println("輸入時發生不可預期的錯誤...");
      System.exit(0);
    } 
    if (a == 4) {
      System.out.println("The answer is " + transform(number));  
      System.exit(0);
    }
    reduce(number,a,b);
  }
  private void guess() {
    for (int i=0; i< answerSet.length; i++) {
      if ( answerSet[i] == -1 ) continue;
      input ( answerSet[i]);
    }
    System.out.println("你騙人!! 根本沒這數字, ***!");
  }
  private void reduce(int number, int a, int b) {
    for (int i=0; i< answerSet.length;  i++) {
      if ( answerSet[i] == -1) continue;
      if (getA(number,answerSet[i]) != a || getB(number,answerSet[i]) != b )
        answerSet[i] = -1;
    }
    for (int i=0; i < answerSet.length; i++) {
      if ( answerSet[i] == -1) continue;
      System.out.print( transform(answerSet[i]) + " ");
    } 
    System.out.println(); 
  }
 
  private int getA(int n1, int n2) {
    int a=0;
    String str1 = transform(n1);
    String str2 = transform(n2);
    for (int i=0; i<4; i++) {
      if (str1.charAt(i) == str2.charAt(i) )
        a++;
    }
    return a;
  }
  private String transform (int n) {
    if ( n < 1000 )
      return "0" + n;
    else
      return ""+n;
  }
  private int getB(int n1, int n2) {
    int b = 0;
    String str1 = transform(n1);
    String str2 = transform(n2);
    for (int i=0; i < 4; i++) {
      for (int j=0; j<4 ; j++) {
        if ( i == j) continue;
        if ( str1.charAt(i) == str2.charAt(j) )
          b++;
      }
    }
    return b;
  }
  
  public static void main (String [] args) {
    GuessNumber app = new GuessNumber();
  }
}


caterpillar edited on 2005-12-26 00:34
reply to postreply to post
YOSHI!
作者 Re:深綠...猜數字程式 [Re:Yoshi]
sungo

瘋狂口罩大盜



發文: 822
積分: 17
於 2004-02-28 12:26 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我的答案是6589...快猜到的時候竟然說沒有此數字∼

Sorry..原來是中間過程打錯∼


sungo edited on 2004-02-28 12:31
reply to postreply to post
作者 Re:深綠...猜數字程式 [Re:sungo]
chrischang





發文: 166
積分: 2
於 2004-02-28 20:48 user profilesend a private message to usersend email to chrischangreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
一個簡單的方法可以讓電腦加速猜數字, 第一次隨機猜數字, 得到一組答案 ?A?B , 然後用剩下所有可能的數字跟之前所猜的數字過濾 , 不符合答案的都是不可能的數字, 以此類推 ... 大約猜個 7 次電腦就可以找到答案了 .

reply to postreply to post
作者 Re:深綠...猜數字程式 [Re:chrischang]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-02-28 22:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
chrischang wrote:
一個簡單的方法可以讓電腦加速猜數字, 第一次隨機猜數字, 得到一組答案 ?A?B , 然後用剩下所有可能的數字跟之前所猜的數字過濾 , 不符合答案的都是不可能的數字, 以此類推 ... 大約猜個 7 次電腦就可以找到答案了 .


這就是brute-force了吧...
我的程式就是這樣做的啊....


reply to postreply to post
YOSHI!
作者 Re:深綠...猜數字程式 [Re:chrischang]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-02-29 14:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
chrischang wrote:
一個簡單的方法可以讓電腦加速猜數字, 第一次隨機猜數字, 得到一組答案 ?A?B , 然後用剩下所有可能的數字跟之前所猜的數字過濾 , 不符合答案的都是不可能的數字, 以此類推 ... 大約猜個 7 次電腦就可以找到答案了 .


不好意思,我現在才看懂你說的話
你說的就是第一次不要猜0123, 而是去解集合裡隨便找一組對吧?
因為我硬碟裡有二個版本的DeepGreen,其中有一個版本的是先猜0123
另一個版本的是隨便選一個猜,我還以為我貼上來的是後者

真是不好意思...


reply to postreply to post
YOSHI!
作者 Re:深綠...猜數字程式 [Re:sungo]
james6619





發文: 24
積分: 0
於 2004-03-01 10:20 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
sungo wrote:
我的答案是6589...快猜到的時候竟然說沒有此數字∼

Sorry..原來是中間過程打錯∼


6589的號,在4689時應該是2a1b吧
所以才會猜不到你的數字


reply to postreply to post
作者 Re:深綠...猜數字程式 [Re:Yoshi]
rfus





發文: 315
積分: 2
於 2004-03-02 09:26 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
超酷的思維耶...除了對所有的數字組合比對之外有更快的演算方式嗎

reply to postreply to post
作者 Re:[猜數字系列]深綠...猜數字程式 [Re:Yoshi]
Kirin_Lin





發文: 130
積分: 0
於 2004-07-06 15:43 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我也是大二的時候寫過這程式耶~ 那時候用的是VB... 想一想也是七八年前了... 哈哈哈哈
記得沒錯的話, 應該是猜三次就可以猜出來.


reply to postreply to post
http://kirin-lin.idv.tw/
Eclipse, WordPress.
Java, PHP.
作者 Re:[猜數字系列]深綠...猜數字程式 [Re:Kirin_Lin]
g951325bird





發文: 1
積分: 0
於 2004-11-17 16:13 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
大大您好:
您作的是電腦猜數字的程式
有沒有電腦設定亂數(四個)由人來猜.再計算猜幾次才中?


reply to postreply to post
作者 Re:[猜數字系列]深綠...猜數字程式 [Re:g951325bird]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-11-17 20:54 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
g951325bird wrote:
大大您好:
您作的是電腦猜數字的程式
有沒有電腦設定亂數(四個)由人來猜.再計算猜幾次才中?


這用亂數去做不就好了,不用十行即可完成,請自己練習吧


reply to postreply to post
YOSHI!
作者 Re:[猜數字系列]深綠...猜數字程式 [Re:Kirin_Lin]
jamestian





發文: 250
積分: 0
於 2013-06-12 19:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Kirin_Lin wrote:
我也是大二的時候寫過這程式耶~ 那時候用的是VB... 想一想也是七八年前了... 哈哈哈哈
記得沒錯的話, 應該是猜三次就可以猜出來.


雖然是很久的討論串了...

可是還是很好奇3次的演算法是????

有code有真相.


reply to postreply to post
» JWorld@TW »  Java 程式分享區 » 數獨、猜數字

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8