投稿者 るしぇ  (社会人) 投稿日時 2010/4/28 13:26:18
えーと、魔界の仮面弁士さんのコメントに一通り答えが載っているので^^;
何度も読み直して理解してくださいね。

別にプログラムの話じゃないので、小学生のなぞなぞが解けるかといったレベル?
考え方は何ら難しくないです。分かってみれば普通のことです。日常生活で
自分が考えている手順の通りプログラムすればできます。

リストに入っている数値は一切見なくてもできます。
現実問題としてはトランプを裏返しのまま一切おもての数字を見ないで
実現することを考えてください。

適当にシャッフルして裏返したままトランプを1列に並べます。
1から52までの中から好きな数字を言います。
トランプの列から、上の数字"番目"のカードを抜きます。
次に1から51までの中から好きな数字を言います。
トランプの列から、上の数字"番目"のカードを抜きます。
・・・最後の1枚が無くなるまで繰り返します。
おもての数字に関係なく実現できるでしょう?
プログラムの答えはたくさんあるので、一例として。


Public Class Form1
    Dim list As New List(Of Integer)
    Const ListMax As Integer = 52

    Private Sub btnStart_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnStart.Click
        Debug.Print("Start")
        '毎回リスト作成 
        For i As Integer = 1 To ListMax
            list.Add(i)
        Next
        Me.Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As ObjectByVal e As System.EventArgs) Handles Timer1.Tick
        Dim MyRandom As New Random
        Dim ListIndex As Integer
        ListIndex = MyRandom.Next(list.Count - 1) '何番目? 
        Me.Label1.Text = list.Item(ListIndex).ToString 'ListIndex番目の数字を表示。 
        Debug.Print(Me.Label1.Text) 'ラベルの表示は残らないので、イミディエイトウィンドウに出力 
        list.RemoveAt(ListIndex) '表示した数字はリストから削除。Remove でなく、RemoveAt を使っているので注意 
        If list.Count <= 0 Then
            'リストに何も無くなったら終了 
            Timer1.Stop()
            Debug.Print("Stop")
        End If
    End Sub

End Class