NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2001國中組初賽
 [VB] NPSC 2001 初賽 有趣的猜數字遊戲

作者 主題: [VB] NPSC 2001 初賽 有趣的猜數字遊戲  (閱讀 2943 次)

lini

  • 高級會員
  • ****
  • 文章數: 101
    • 檢視個人資料
[VB] NPSC 2001 初賽 有趣的猜數字遊戲
« 於: 十一月 29, 2009, 10:57:25 am »

找出所有可能的組合 並一個個比較

for : 10*10*10*10=10000
暴力解不會TLE

國二寫的 有些語法可能過於冗長

compareN 函數求出幾A幾B
chk 判斷是否符合任兩數必不相同

代碼: [選擇]
Sub main()
    Open "guess.in" For Input As #1
    Open "guess.out" For Output As #2
    f = ""
    Do
        Input #1, n
        If n = "***" Then f = f & " " & n: Exit Do
        If n = "*" Then
            f = f & " " & n
            ds = 0
            ReDim a(10000, 1)
            Do
                Line Input #1, d
                If d = "**" Then Exit Do
                a(ds, 0) = Left(d, 4)
                a(ds, 1) = Right(d, 4)
                ds = ds + 1
            Loop
            For i = 0 To 9
                For j = 0 To 9
                    For k = 0 To 9
                        For l = 0 To 9
                            If chk(i, j, k, l) <> False Then
                                y = True
                                For m = 0 To ds - 1
                                    If compareN(a(m, 0), i & j & k & l) <> a(m, 1) Then y = False: Exit For
                                Next
                                If y = True Then f = f & " " & i & j & k & l
                            End If
                        Next
                    Next
                Next
            Next
            f = f & " " & "**"
        End If
    Loop
    Print #2, Replace(Trim(f), " ", vbCrLf)
    Close
End Sub

Function chk(n1, n2, n3, n4)
    a = Array(n1, n2, n3, n4)
    y = True
    For i = 0 To 3
        For j = 0 To 3
            If i <> j And a(i) = a(j) Then y = False
        Next
    Next
    chk = y
End Function

Function compareN(n1, n2)
    a = 0: b = 0
    For i = 1 To 4
        For j = 1 To 4
            If Mid(n1, i, 1) = Mid(n2, j, 1) Then
                If i = j Then
                    a = a + 1
                Else
                    b = b + 1
                End If
                Exit For
            End If
        Next
    Next
    compareN = a & "A" & b & "B"
End Function

類似題目 : 2007國中組決賽 猜數字
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2001國中組初賽
 [VB] NPSC 2001 初賽 有趣的猜數字遊戲