掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
乱数発生に重ならないようにしたら処理時間がかなりかかる。 (ID:109308)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
通りすがりですが。 コレってビンゴや分割パズルに使うヤツですよね。 全部使わなかったり、母数が多い場合はこういうのもアリか?・・・と。 Option Explicit Private Bufs() As Integer Private MaxNums As Integer Private Sub Command1_Click() Dim i As Integer Randomize List1.Clear Call Rinit(10) '引数に必要な乱数の個数セットして初期化しる For i = 1 To 10 List1.AddItem Rget() 'コレを必要なだけ呼び出します、(呼びすぎ注意) Next i End Sub 'バッファの確保とテーブルの作成 Private Sub Rinit(X As Integer) Dim i As Integer ReDim Bufs(X) MaxNums = X For i = 1 To X Bufs(i) = i Next i End Sub 'くじ引き的抽選 '残っているテーブル番号をランダムに選び、数値を抜き取る '取ったあとはテーブルの最後の数値に書き換えて、テーブル数を減らします(同じ数値は出ません) '正規分布はしないけど、ゲームに使うならってことで '(バレルシフトすればソートしたのと同じになりますけどね) Private Function Rget() As Integer Dim Ptr As Integer Ptr = Int(Rnd() * MaxNums) + 1 Rget = Bufs(Ptr) Bufs(Ptr) = Bufs(MaxNums) If MaxNums > 1 Then MaxNums = MaxNums - 1 End If End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.