[リストへもどる]
一括表示

投稿時間:2002/09/29(Sun) 16:23
投稿者名:けいこ
Eメール:
URL :
タイトル:
VBで任意の排他的な数列をつくるには
こんにちは、初めて質問させていただきます。
さっそくですが、例えば1,2,3,4,5という数字を
3,1,2,5,4のように、バラバラな順番にする方法ってあるんでしょうか?
つまり、同じ数字は2度と表れず、かつ、ランダムに(実行毎に毎回異なる)
数列です。ランダマイズで考えてできないか考えましたが、頭が痛くなってきました。
もし、おわかりの方がいらっしゃったら是非教えていただけませんか?

投稿時間:2002/09/29(Sun) 18:46
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re: VBで任意の排他的な数列をつくるには
> さっそくですが、例えば1,2,3,4,5という数字を
> 3,1,2,5,4のように、バラバラな順番にする方法ってあるんでしょうか?
> つまり、同じ数字は2度と表れず、かつ、ランダムに(実行毎に毎回異なる)
> 数列です。ランダマイズで考えてできないか考えましたが、頭が痛くなってきました。
> もし、おわかりの方がいらっしゃったら是非教えていただけませんか?

配列に先に1〜5を設定しておき、
ランダムにその配列の同士の中身を入れると重複することなく
ランダムな順にできます。トランプのカードをきるのと同じ発想です。

投稿時間:2002/10/01(Tue) 14:03
投稿者名:けいこ
Eメール:
URL :
タイトル:
Re^2: VBで任意の排他的な数列をつくるには

> 配列に先に1〜5を設定しておき、
> ランダムにその配列の同士の中身を入れると重複することなく
> ランダムな順にできます。トランプのカードをきるのと同じ発想です。

ありがとうございます。さっそく作ってみました。
解決して、頭すっきりです。う〜ん、思いつきませんでした。

Private Sub subShaffle(shMaxNum As Integer) ’shMAXまでの数の排他数列
    Dim rndmNum As Integer
    Dim shKaisu As Integer
    Dim shI As Integer
    Dim tmpNum As Integer
    
    For shI = 1 To shMaxNum
        shNum(shI) = shI
    Next
    
    For shI = 1 To shMaxNum
    
        Randomize
        rndmNum = Int((shMaxNum - 1 + 1) * Rnd + 1)
        tmpNum = shNum(shI)
        shNum(shI) = shNum(rndmNum)
        shNum(rndmNum) = tmpNum
        
    Next
    
'    MsgBox shNum(1) & shNum(2) & shNum(3) & shNum(4) & shNum(5)
    
End Sub

投稿時間:2002/09/30(Mon) 09:18
投稿者名:Say
Eメール:
URL :
タイトル:
Re: VBで任意の排他的な数列をつくるには
もし、発生させる乱数が「重複しないLong型の任意の正数」とかでしたら、
0〜21億をシャッフルするのは大変ですから、

使った乱数はそのつど配列に保持しておき
新たに乱数を作るたびに配列のデータと比較して、
既に使われているなら作り直す、
という方法もあります。

よねKEN さんの方法とどちらを用いるかは、
作成する乱数の範囲と個数から判断してください。

投稿時間:2002/10/01(Tue) 14:06
投稿者名:けいこ
Eメール:
URL :
タイトル:
Re^2: VBで任意の排他的な数列をつくるには
>
> よねKEN さんの方法とどちらを用いるかは、
> 作成する乱数の範囲と個数から判断してください。

あっ、なるほど、その手もあるんですね・・・
ありがとうございます。
とりあえずよねKENさんの方法で作ってしまいましたが、
そうか、配列とだったら比較も簡単につくれますよね・・・
アドバイスありがとうございます。