VBGood網站全文搜索 Google

搜索VBGood全站網頁(全文搜索)

VB愛好者樂園(VBGood)

 找回密碼
 立即注冊
搜索
查看: 2959|回復: 18
打印 上一主題 下一主題

誰能寫一個 猜數字游戲解算的算法,短小精悍

[復制鏈接]
跳轉到指定樓層
1
發表于 2016-9-23 01:29:25 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
先介紹一下猜數字 數字為四個數字不重復 比如 1234
如果猜 4567 就是數字正確但位置不對,結果 0A1B
根據這樣的提示再猜 5674,結果 1A0B
就是這樣,那時候文曲星里面就有這樣的游戲

然后根據已有的數據 比如

  1. 1357 1A1B
  2. 1235 3A0B
  3. 1243 2A2B
  4. 1423 1A3B
復制代碼
最快的計算出結果

本帖被以下淘專輯推薦:

2
 樓主| 發表于 2016-9-23 01:29:56 | 只看該作者

點評

其實我正在寫,然后難倒了。  發表于 2016-9-23 01:30
回復 支持 反對

使用道具 舉報

3
發表于 2016-9-23 09:38:07 | 只看該作者
本帖最后由 lowxiong 于 2016-9-23 10:27 編輯

解算,應該暴力最簡單精悍吧。

點評

有次數的,最多10次,越少越好  發表于 2016-9-23 11:16
回復 支持 反對

使用道具 舉報

4
 樓主| 發表于 2016-9-23 11:17:14 | 只看該作者
回復 支持 反對

使用道具 舉報

5
發表于 2016-9-23 11:36:54 | 只看該作者
這個AI我認為需要各個擊破,每個組合有不同的破解策略,如0A0B:劃掉這4個數,接下來在剩下的6個數里組合,2A2B,則最多3次兩兩交換。不可能出現3A1B或1A3B的情況

點評

1A3B可以出現。  發表于 2016-9-24 16:54

評分

參與人數 1人氣 +3 收起 理由
JuncoJet + 3 很給力

查看全部評分

回復 支持 反對

使用道具 舉報

6
發表于 2016-9-24 12:30:51 | 只看該作者
根據已有數據列出所有可能的結果這個很容易寫吧,我很久以前寫過……AI的話我用的是從所有可能結果里面隨機選出一個出來

點評

要在10次內確定這個數字,否則就OVER了。  發表于 2016-9-24 13:24
回復 支持 反對

使用道具 舉報

7
發表于 2016-9-24 13:13:58 | 只看該作者
這個是mastermind哦
回復 支持 反對

使用道具 舉報

8
 樓主| 發表于 2016-9-24 23:46:37 | 只看該作者
  1. Private Sub Command3_Click()
  2. 'On Error GoTo break
  3.     Text2 = vbNullString
  4.     Dim lst(9)
  5.     For i = 0 To 9
  6.         lst(i) = 1
  7.     Next
  8.     txt = Split(Text1, vbCrLf)
  9.     For Each s In txt
  10.         If Len(s) < 8 Then
  11.             GoTo break
  12.         End If
  13.         x = Split(s, " ")
  14.         a = Val(x(1))
  15.         b = Val(x(2))
  16.         Dim n(3)
  17.         For i = 0 To 3
  18.             c = Mid(x(0), i + 1, 1)
  19.             n(i) = Val(c)
  20.         Next
  21.         Select Case a + b
  22.         Case 4
  23.             For i = 0 To 9
  24.                 lst(i) = 0
  25.             Next
  26.             For i = 0 To 3
  27.                 lst(n(i)) = 1
  28.             Next
  29.         Case 3
  30.             Select Case a
  31.             Case 3
  32.             Case 2
  33.             Case 1
  34.             Case 0
  35.             End Select
  36.         Case 2
  37.             Select Case a
  38.             Case 2
  39.             Case 1
  40.             Case 0
  41.             End Select
  42.         Case 1
  43.             Select Case a
  44.             Case 1
  45.             Case 0
  46.             End Select
  47.         Case 0
  48.             For i = 0 To 3
  49.                 lst(n(i)) = 0
  50.             Next
  51.         End Select
  52.     Next
  53. break:
  54.     out = vbNullString
  55.     x = 0
  56.     Dim lst2(9)
  57.     For i = 0 To 9
  58.         lst2(i) = -1
  59.         If lst(i) = 1 Then
  60.             lst2(x) = i
  61.             x = x + 1
  62.         End If
  63.     Next
  64.     z = x - 1
  65.     x = 0
  66.     For a = 0 To z
  67.         For b = 0 To z
  68.             For c = 0 To z
  69.                 For d = 0 To z
  70.                     If a <> b And a <> c And a <> d And _
  71.                        b <> c And b <> d And _
  72.                        c <> d Then
  73.                         out = out & lst2(a) & lst2(b) & lst2(c) & lst2(d) & vbCrLf
  74.                         x = x + 1
  75.                     End If
  76.                 Next
  77.             Next
  78.         Next
  79.     Next
  80.     Label1 = x & "個結果"
  81.     Text2 = out
  82. End Sub
復制代碼
現在我能想到的解算方式是這樣的,A+B個數分類,然后拆分AB個數
思路是5樓啟發我的

點評

我很久以前試驗過了,就算隨機猜,大概在7次以內也能猜出來  發表于 2016-10-3 16:51
回復 支持 反對

使用道具 舉報

9
 樓主| 發表于 2016-9-24 23:49:37 | 只看該作者
這個可以有直接算法的結果 A+B==4||A+B==0
其他的話 真心不好判斷
回復 支持 反對

使用道具 舉報

10
 樓主| 發表于 2016-9-25 02:24:35 | 只看該作者
1234 2A0B
5678 0A2B

12XX
1X3X
1XX4
X23X
X2X4
XX34

56 65
57 75
58 85
67 76
68 86
78 87
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

文字版|手機版|小黑屋|VBGood  

GMT+8, 2019-12-7 15:00

VB愛好者樂園(VBGood)
快速回復 返回頂部 返回列表
快乐十分开奖结查询