2010年9月20日 星期一

一堆線段

內容 :
愛斯基摩人給了你一堆線段,他想要問這些線段能組合出幾種多邊形呢?

對了 他說那些線段長度不會有重複的

輸入說明 :
有多組測試資料

每組測試資料佔一行,有一些以一個空白分開的正整數(不超過100個),並且行末不會有多餘的空白

若該組測試資料只含有0 ,請結束程式且不要輸出任何數字

(所有資料均不會大於1000000)

輸出說明 :
對每組測試資料輸出一個數

代表這些線段能組合出幾種多邊形 (多邊形為三邊或以上)

範例輸入 :

3 5 6 9 4
2 3 4 10
7 8 9
1 2 10
7 8
0
範例輸出 :

12
1
1
0
0
提示 :
在第一組測試範例中:

三角形:
3 4 5
3 4 6
3 5 6
4 5 6
4 6 9
5 6 9

四邊形:
3 4 5 6
3 4 5 9
3 4 6 9
3 5 6 9
4 5 6 9

五邊形:
3 4 5 6 9

1 則留言:

  1. Private Sub Form_Activate()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2

    Do
    Line Input #1, step
    If step = 0 Then Exit Sub
    'step = Replace(step, " ", "")
    sstep = Replace(step, " ", "")
    o = 1
    n = 0
    For i = 3 To Len(sstep)
    Call ans(step, st, i, (o), n)
    Next i
    Print n
    Loop
    Close #1
    Close #2
    End Sub

    Function ans(step, st, q, o, n)
    If Len(st) < q Then
    For i = o To Len(step)
    ha:
    stm = Mid(step, i, 1)
    If stm = " " Then i = i + 1: o = o + 1: GoTo ha
    If InStr(st, stm) = 0 Then Call ans(step, st & stm, q, o + 1, n)
    o = o + 1
    Next i
    Else
    Max = Val(Mid(st, 1, 1)): k = 0
    For i = 1 To Len(st)
    If Val(Mid(st, i, 1)) > Max Then Max = Val(Mid(st, i, 1))
    k = k + Val(Mid(st, i, 1))
    Next i
    If k - Max * 2 > 0 Then
    n = n + 1
    End If

    End If
    End Function


    還沒完成...
    BY阿楊

    回覆刪除