Welcome~~~


Another blog:
http://fun-st.blogspot.com/

It is easier to write an incorrect program than understand a correct one.

Wednesday, February 9, 2011

# Shuffle Array : deck of cards

C++ Notes: Example - Shuffle Array

Suppose you want to randomize an array of 52 values, from 0 to 51 with no repeats, such as you might want for a deck of cards. First fill the array with the values in order, then go thru the array and exchange each element with a randomly chosen element in the range from itself to the end. It's possible that an element will be exchanged with itself, but there is no problem with that.



// File        : misc/random/deal.cpp - Randomly shuffle deck of cards.
// Illustrates : Shuffle algorithm, srand, rand.
// Improvements: Use classes for Card and Deck.
// Author      : Fred Swartz 2003-08-24, shuffle correction 2007-01-18
//               Placed in the public domain.

#include <iostream>
#include <cstdlib>   // for srand and rand
#include <ctime>     // for time
using namespace std;

int main() {
    int card[52];    // array of cards;
    int n;           // number of cards to deal
    srand(time(0));  // initialize seed "randomly"
    
    for (int i=0; i<52; i++) {
        card[i] = i;  // fill the array in order
    }
   
    while (cin >> n) {   
        //--- Shuffle elements by randomly exchanging each with one other.
        for (int i=0; i<(52-1); i++) {
            int r = i + (rand() % (52-i)); // Random remaining position.
            int temp = card[i]; card[i] = card[r]; card[r] = temp;
        }
       
        //--- Print first n cards as ints.
        for (int c=0; c<n; c++) {
            cout << card[c] << " ";  // Just print number
        }
        cout << endl;
    }
  
   return 0;
}



♥ ¸¸.•*¨*•♫♪♪♫•*¨*•.¸¸♥
http://www.fredosaurus.com/notes-cpp/misc/random-shuffle.html

No comments:

Post a Comment