English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

整數的分割方式
對於一個正整數n而言,它是一個分割(Partition),就是把n寫成若干個正整數的和,但不計較書寫的順序,請寫一個程式,輸入n,把n的所有的分割顯示出來。
說明:
如果n=7那麼我們有如下的分割:
7
6 1
5 2
5 1 1
4 3
4 2 1
4 1 1 1
3 3 1
3 2 2
3 2 1 1
3 1 1 1 1
2 2 2 1
2 2 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1


輸入格式:
input N=6
輸出格式:
6
5 1
4 2
4 1 1
3 3
3 2 1
3 1 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1

這題有些難度 不知道有哪位大大可以幫幫忙...
我只寫到一半後面就不順了

2006-10-18 04:19:32 · 5 個解答 · 發問者 小均 2 in 電腦與網際網路 程式設計

這是我寫一半的程式 希望可以給大大一點幫助
或是修改...
http://quietmes.myweb.hinet.net/int.txt

2006-10-18 04:24:44 · update #1

5 個解答

Private Sub Command1_Click()    Dim I As Integer, J As Integer, A As Integer, N As Integer        Do      N = Abs(Int(Val(InputBox("請輸入正整數", , 7))))    Loop Until N >= 0        Cls    ReDim X(0) As String: X(0) = N    Do       '利用Join函數將X陣列轉成字串輸出       Print Join(X, "")       J = UBound(X)       '找出陣列中最後一個大於1的索引值       For I = UBound(X) To 0 Step -1           If Val(X(I)) > 1 Then A = X(I): Exit For       Next       '找不到就表示全部都是1,收工!       If I < 0 Then Exit Sub       '重新宣告陣列大小(把等於1的陣列刪除)       ReDim Preserve X(I)       '最後一個大於1的陣列值減1       X(I) = A - 1       '計算整個陣列總和還差N多少       A = J - I + 1: J = I + 1       '新增一個陣列,把差值放入       ReDim Preserve X(J): X(J) = A       '若此陣列的值大於前個陣列的值,就將此陣列值改成跟前個陣列的值相同,再新增一個陣列放入減去前個陣列後的值,直到此陣列的值<=前個陣列的值       Do While A > Val(X(J - 1))          X(J) = X(J - 1): A = A - X(J): J = J + 1          ReDim Preserve X(J): X(J) = A       Loop       '讓程式停下來看看有無別的事要做(因為若N太大要跑很久,加Doevents才不會當掉)       DoEvents    LoopEnd Sub

2006-10-19 18:09:49 補充:
Liu-Liu兄,你潛水太久該浮上來換換氣了^^

2006-10-18 14:09:31 · answer #1 · answered by W.J.S. 7 · 0 0

Dim AnswerTemp() As Integer
'AnswerTemp(0)是用來記錄目前答案使用的陣列空間大小

Sub Answer(a As Integer, b As Integer)
'a是剩餘的和,b是限制後面的數不可以比前面的大
 Dim i As Integer
 If a = 1 Then
  For i = 1 To AnswerTemp(0)
   temp = temp & Str(AnswerTemp(i))
  Next
  Form1.Print temp & Str(1)
 Else
  AnswerTemp(0) = AnswerTemp(0) + 1
  For i = a To 1 Step -1
   AnswerTemp(AnswerTemp(0)) = i
   If b >= i Then
    Answer a - i, i
   End If
  Next
  AnswerTemp(0) = AnswerTemp(0) - 1
 End If
End Sub

Private Sub Form_Click()
 Dim a As Integer
 a = InputBox("請輸入數值")
 ReDim AnswerTemp(a)
 Form1.Print a
 Answer a, a
End Sub

2006-10-21 21:50:39 · answer #2 · answered by 五百六 3 · 0 0

呼~~各位大大你們年紀都多少阿??
學了幾年阿??幾時才能像你們這樣??

2006-10-19 15:15:54 · answer #3 · answered by 小均 2 · 0 0

這題我解不出來,想不到被 WJS 大解決了,實在有夠強。

2006-10-19 13:03:04 · answer #4 · answered by 世賢 7 · 0 0

能不能打上註解呢?

2006-10-18 21:35:57 補充:
喔....不用了,已經看懂了 = =

2006-10-18 17:27:07 · answer #5 · answered by jj0900 1 · 0 0

fedest.com, questions and answers