数当ての正解をランダムで発生させるのにどうするか考察中3

投稿者:Logo mini hightoller 投稿日:2011/05/01 02:29

p = createArray()
dig = 0
  while dig < b #passdig
  len = getArrayLength(k)
  p[dig] = k[rand(len)] 
  pck = 0
    while pck < len #keypck
      if k[pck] >= p[dig] #
      k[pck] = k[pck+1]
      end #
    pck = pck + 1
    end #keypck
  popArray(k)
  dig = dig + 1
  end #passdig

重複する理由が単純に配列に1を加えてたからってのに気付く。
次の配列を参照しないといけなかったんですな。こいつは解決。

しかし前回のブログに頂戴したrurun9さんの提言の方が
求め方が簡略できそうなので挑戦。

1からaまでの数字をランダムに入れ替え、b桁になるまで削る。

明日やってみよう。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Logo mini hightoller(投稿日:2011/05/01 22:47, 履歴)
i =0
  while i < a
  r = rand(a)
  p = k[i]
  k[i] = k[r]
  k[r] = p
  i = i + 1
  end
while i > b
popArray(k)
i = i - 1
end

で、無事動きました。
Logo mini hightoller(投稿日:2011/05/01 17:37, 履歴)
a = 5
b = 3
k[0]=1 k[4]=5

i =0
  while i < a
  r = rand(a)
  k[i] = k[r]
  k[r] = i + 1
  i = i + 1
  end
while i > b
popArray(k)
i = i - 1
end

こんなかんじ?
Logo mini hightoller(投稿日:2011/05/01 15:09, 履歴)
一つ疑問が。例えば1.2.3の数字を左から順に3回、3箇所の中から入れ替える時、
2が動かない確率と動いたけど元の場所に戻る確率を加えた物が、
1.2.3の中から1個ずつ選んで並べた時、2番目に2が来る確率って同じなのかな。。
前者、動かない確率が2/3*1/3*2/3=4/27。
2回で戻る確率が1/3*1/3*2/3+2/3*1/3*1/3=4/27
3回で戻る確率が1/3*1/3*1/3=1/27
後者が2/3*1/2=1/3。
同じか。