請問各位高手如何設計以下結果
數字範圍01-10,每一行6碼
用亂數排出來
當01-10產生後, 重新再產生01-10,總共三次
05 01 03 08 02 06
04 09 10 07 01 03
08 02 09 04 05 07
06 10 09 01 07 04
02 08 03 06 05 10
2006-02-23 16:24:51 · 3 個解答 · 發問者 阿祥 2 in 電腦與網際網路 ➔ 程式設計
謝謝兩位的回答,不過我試的結果好像沒出現我要的答案
可能我敘述的不夠清楚,我把上面的東西改一下大家應該就明白了
01 02 03 04 05 06
07 08 09 10 01 02
03 04 05 06 07 08
09 10 01 02 03 04
05 06 07 08 09 10
其中只是把01-10的順序打亂而已,所以結果應該是出現5行
2006-02-24 16:14:43 · update #1
請開一新的VB project 在From 上加一Button 再把其中Command1_Click 加上以下程式, 按下Command1 按鈕後就會輸出結果了!!!!
Private Sub Command1_Click()
Dim NumArray(10) As Integer
Dim i As Integer
Dim j As Integer
Dim index1 As Integer
Dim index2 As Integer
Dim tmp As Integer
Dim tmpString As String
'起始亂數種子,以時間為基礎
Randomize
'開啟輸出檔案 c:\output.txt 錯誤檢查需要時您再加
Open "c:\output.txt" For Binary Access Write As #1
'j 控制次數3 次
For j = 1 To 3
' 把1-10 循序放在NumArray
For i = 0 To 9
NumArray(i) = i + 1
Next i
' 取亂數兩次(1 - 10)並交換
For i = 1 To 1000
index1 = Int((10 * Rnd) + 1) - 1 ' Generate random value between 0 and 9
index2 = Int((10 * Rnd) + 1) - 1 ' Generate random value between 0 and 9
If index1 <> index2 Then
'index 不同,交換
tmp = NumArray(index2)
NumArray(index2) = NumArray(index1)
NumArray(index1) = tmp
End If
Next i
' 這裡輸出為了符合格式,因此看起來較麻煩
For i = 1 To 6
If (NumArray(i - 1) <> 10) Then '不是10 就要補零
tmpString = 0 & NumArray(i - 1)
Put #1, , tmpString
Else
tmpString = NumArray(i - 1)
Put #1, , tmpString
End If
Put #1, , " " '每以個數字後加一空白
Next i
Put #1, , Chr(13) + Chr(10) '輸出換行
Next j
Close #1
MsgBox "請開啟c:\output.txt 看結果"
End Sub
2006-02-24 16:31:29 補充:
回答者:W.J.S.(初學者 1 級) 補充的部份有一些問題,因為N = Int(Rnd * 10 + 1) '亂數產生數值範圍為1-10 因此不能用 S = S & N '數值記錄到S字串來判斷是否重覆,因為10 一出現InStr 中1也會被判斷為已出現,因此要稍加修改,才可必免此情況,比如說後加一個'*' InStr中就
檢查 N & '*'
底下也是如此
S = S & N & '*'
這樣才能必免掉此問題耶^_^
2006-02-25 16:43:22 補充:
若要輸出5 行, 只要把'j 控制次數3 次For j = 1 To 3改成 For j = 1 to 5 就行了阿, 我想您還是應該要了解一下程式在寫什麼, 不然只是找人幫您寫作業耶^_^
2006-02-25 16:46:37 補充:
對不起,我誤解意思了,再補上更新的程式, 原則是相同的先把1-10 重複三次排好, 然後用亂數1000次交換,然後最後輸出交換後的序列,稍後補上程式!
2006-02-25 17:14:06 補充:
補充的部分有字數的限制,因此我將VB project 放在我的ftp 中 knight2x.no-ip.info 帳號:guest 密碼 guestQA 有大小寫區分,用IE 是 ftp://guest:guestQA@knight2x.no-ip.info 希望對你有幫助
2006-02-23 16:35:22 · answer #1 · answered by peggy 3 · 0⤊ 0⤋
這不是我的作業,我只是在練習寫VB時突然想到這樣的問題但是不知該如何下手,所以想說上來問一下。
真的是很感謝各位上來熱心的回答..
2006-02-26 23:11:57 補充:
我有上去把檔案抓下來了,非常謝謝喔
2006-02-26 17:45:35 · answer #2 · answered by 阿祥 2 · 0⤊ 0⤋
Private Sub Command1_Click()
Dim I As Integer, J As Integer, N As Integer, S As String
For I = 1 To 3 '總共3次
S = "": Randomize '初始亂數
For J = 1 To 6 '6個號碼
Do
N = Int(Rnd * 9 + 1) '亂數產生數值1~9
Loop Until InStr(S, N) = 0 'S字串內無此數值離開迴圈
S = S & N '數值記錄到S字串
Print Format(N, "00") & " "; '輸出
Next
Print '換行
Next
End Sub
2006-02-24 14:43:50 補充:
唉呀!搞錯了是要1~10,請將N = Int(Rnd * 9 + 1) '亂數產生數值1~9改成N = Int(Rnd * 10 + 1) '亂數產生數值1~10..Orz
2006-02-25 10:29:45 補充:
謝謝Kinght大的指正,因為之前沒看好題目,修改後又沒試..汗顏XD
2006-02-25 10:46:10 補充:
For I = 1 To 3 S = "": Randomize For J = 1 To 10 Do N = Int(Rnd * 10 + 1) Loop Until InStr(S, "," & N & ",") = 0 S = S & "," & N & "," If X And X Mod 6 = 0 Then Print Print Format(N, "00") & " "; X = X + 1 NextNext
2006-02-23 17:36:04 · answer #3 · answered by W.J.S. 7 · 0⤊ 0⤋