2011年5月30日 星期一

0 與 1 的遊戲

內容 : 
有 1 個 bit,可以表示 0 與 1。
有 2 個 bit,可以表示 00,01,10,11。
有 n 個 bit,請產生所有 n 個 bit 所能表示的 2 進位數字。
輸入說明 :
每行一個數字 n ( 0 < n < 15 )
代表 n 個bit
輸出說明 :
 請參考範例輸出
範例輸入 :
2
 
範例輸出 :
00 
01 
10 
11
 
提示 :
字串是你的好朋友

8 則留言:

  1. Private Sub Form_Load()
    Me.Hide

    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, N
    Call ABC(N, "", "")
    Loop
    Close #2
    Close #1

    End
    End Sub

    Sub ABC(A, B, C)
    If A = Len(B) Then
    Print #2, B
    Else
    For i = 0 To 1
    Call ABC(A, B & i, C)
    Next i
    End If
    End Sub

    有遞迴就簡單了:D

    -----------------------
    in.txt
    1
    2
    3
    -----------------------
    out.txt
    0
    1
    00
    01
    10
    11
    000
    001
    010
    011
    100
    101
    110
    111

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, n

    Call func(n, "")
    Loop
    Close
    Close
    End
    End Sub

    Sub func(a, s)
    If Len(s) = a Then
    Print #2, s
    Else
    For i = 0 To 1
    Call func(a, s & i)
    Next
    End If
    End Sub

    ////////////////////
    輸入
    4
    5
    6
    輸出
    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    1001
    1010
    1011
    1100
    1101
    1110
    1111
    00000
    00001
    00010
    00011
    00100
    00101
    00110
    00111
    01000
    01001
    01010
    01011
    01100
    01101
    01110
    01111
    10000
    10001
    10010
    10011
    10100
    10101
    10110
    10111
    11000
    11001
    11010
    11011
    11100
    11101
    11110
    11111
    000000
    000001
    000010
    000011
    000100
    000101
    000110
    000111
    001000
    001001
    001010
    001011
    001100
    001101
    001110
    001111
    010000
    010001
    010010
    010011
    010100
    010101
    010110
    010111
    011000
    011001
    011010
    011011
    011100
    011101
    011110
    011111
    100000
    100001
    100010
    100011
    100100
    100101
    100110
    100111
    101000
    101001
    101010
    101011
    101100
    101101
    101110
    101111
    110000
    110001
    110010
    110011
    110100
    110101
    110110
    110111
    111000
    111001
    111010
    111011
    111100
    111101
    111110
    111111

    回覆刪除
  3. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\out.txt" For Output As #2
    Open App.Path & "\in.txt" For Input As #1

    Do Until EOF(1)
    Input #1, n
    Call c("", n)
    Loop

    Close #1
    Close #2
    End
    End Sub
    Sub c(a1, b1)
    If Len(a1) = b1 Then
    Print #2, a1
    Else
    For i = 0 To 1
    Call c(a1 & i, b1)
    Next
    End If
    End Sub
    --------------------
    in.txt
    1
    2
    3
    --------------------
    out.txt
    0
    1
    00
    01
    10
    11
    000
    001
    010
    011
    100
    101
    110
    111

    回覆刪除
  4. 佑, arro,緣尉好,
    3個人都是用遞迴解了,很好,也都正確。
    但是,再想一想,如果沒有用遞迴,又該如何去解呢?

    回覆刪除
  5. 10轉2的解析
    http://e-service.puiching.edu.mo/digital/images/IMG_1623.JPG
    易懂

    Private Sub Form_Load()
    Me.Hide

    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, N
    For i = 0 To (2 ^ N - 1)
    ans = ten_to_two(i)
    If i = 0 Then
    For j = 1 To (N - 1)
    ans = ans & "0"
    Next j
    End If
    If Len(ans) = N Then Print #2, ans
    Next i
    Loop
    Close #2
    Close #1

    End
    End Sub

    Function ten_to_two(ByVal A)
    ans = ""
    Do
    X = A Mod 2
    If X = 0 Then ans = "0" & ans Else ans = "1" & ans
    A = A \ 2
    Loop Until A = 0
    ten_to_two = ans
    End Function

    in.txt
    3
    4
    5
    6
    7
    --------------------
    out.txt
    000
    100
    101
    110
    111
    0000
    1000
    1001
    1010
    1011
    1100
    1101
    1110
    1111
    00000
    10000
    10001
    10010
    10011
    10100
    10101
    10110
    10111
    11000
    11001
    11010
    11011
    11100
    11101
    11110
    11111
    000000
    100000
    100001
    100010
    100011
    100100
    100101
    100110
    100111
    101000
    101001
    101010
    101011
    101100
    101101
    101110
    101111
    110000
    110001
    110010
    110011
    110100
    110101
    110110
    110111
    111000
    111001
    111010
    111011
    111100
    111101
    111110
    111111
    0000000
    1000000
    1000001
    1000010
    1000011
    1000100
    1000101
    1000110
    1000111
    1001000
    1001001
    1001010
    1001011
    1001100
    1001101
    1001110
    1001111
    1010000
    1010001
    1010010
    1010011
    1010100
    1010101
    1010110
    1010111
    1011000
    1011001
    1011010
    1011011
    1011100
    1011101
    1011110
    1011111
    1100000
    1100001
    1100010
    1100011
    1100100
    1100101
    1100110
    1100111
    1101000
    1101001
    1101010
    1101011
    1101100
    1101101
    1101110
    1101111
    1110000
    1110001
    1110010
    1110011
    1110100
    1110101
    1110110
    1110111
    1111000
    1111001
    1111010
    1111011
    1111100
    1111101
    1111110
    1111111

    回覆刪除
  6. 10→2 10→8 10→16
    http://content.edu.tw/vocation/data_processing/ks_ct/ch3/3-2.htm

    回覆刪除
  7. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2

    Do Until EOF(1)
    Input #1, n, m
    ans = t2(n)
    Print #2, n & " 的 10 進位轉成 2 進位,為 " & ans
    ans = t8(n)
    Print #2, n & " 的 10 進位轉成 8 進位,為 " & ans
    ans = t16(n)
    Print #2, n & " 的 10 進位轉成 16 進位,為 " & ans
    ans = t(n, m)
    Print #2, n & " 的 10 進位轉成 " & m & " 進位,為 " & ans
    Print #2, "----------------------"
    Loop

    Close #1
    Close #2
    End
    End Sub
    Function t2(ByVal a1)
    Do
    remd1 = a1 Mod 2
    an1 = remd1 & an1
    If a1 \ 2 = 0 Then Exit Do
    a1 = a1 \ 2
    Loop
    t2 = an1
    End Function
    Function t8(ByVal a2)
    Do
    remd2 = a2 Mod 8
    an2 = remd2 & an2
    If a2 \ 8 = 0 Then Exit Do
    a2 = a2 \ 8
    Loop
    t8 = an2
    End Function
    Function t16(ByVal a3)
    e3 = Split("A B C D E F")
    Do
    remd3 = a3 Mod 16
    If remd3 > 9 Then remd3 = e3(remd3 - 10)
    an3 = remd3 & an3
    If a3 \ 16 = 0 Then Exit Do
    a3 = a3 \ 16
    Loop
    t16 = an3
    End Function
    Function t(ByVal a4, ByVal b4)
    e4 = Split("0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z")
    Do
    remd4 = a4 Mod b4
    an4 = e4(remd4) & an4
    a4 = a4 \ b4
    Loop Until a4 = 0
    t = an4

    End Function
    --------------------------
    in.txt
    105 2
    10985 16
    --------------------------
    out.txt
    105 的 10 進位轉成 2 進位,為 1101001
    105 的 10 進位轉成 8 進位,為 151
    105 的 10 進位轉成 16 進位,為 69
    105 的 10 進位轉成 2 進位,為 1101001
    ----------------------
    10985 的 10 進位轉成 2 進位,為 10101011101001
    10985 的 10 進位轉成 8 進位,為 25351
    10985 的 10 進位轉成 16 進位,為 2AE9
    10985 的 10 進位轉成 16 進位,為 2AE9
    ----------------------

    回覆刪除
  8. 緣尉好,
    程式ok,雖然累了一些。

    回覆刪除