shuffle.c
/*-----------------------------------------------------------------------------
* Copyright (C) 1995 Herb Weiner. All rights reserved.
* Demonstration that 8 perfect shuffles returns a deck of 52 chards
* to its original order.
* Compile using gcc compiler.
*-----------------------------------------------------------------------------
*/
#include <stdio.h>
static const int NUMBER_OF_SHUFFLES = 8;
static const int NUMBER_OF_CARDS = 52;
static const char *cards [] =
{
"Ace Clubs",
"2 Clubs",
"3 Clubs",
"4 Clubs",
"5 Clubs",
"6 Clubs",
"7 Clubs",
"8 Clubs",
"9 Clubs",
"10 Clubs",
"Jack Clubs",
"Queen Clubs",
"King Clubs",
"Ace Diamonds",
"2 Diamonds",
"3 Diamonds",
"4 Diamonds",
"5 Diamonds",
"6 Diamonds",
"7 Diamonds",
"8 Diamonds",
"9 Diamonds",
"10 Diamonds",
"Jack Diamonds",
"Queen Diamonds",
"King Diamonds",
"Ace Hearts",
"2 Hearts",
"3 Hearts",
"4 Hearts",
"5 Hearts",
"6 Hearts",
"7 Hearts",
"8 Hearts",
"9 Hearts",
"10 Hearts",
"Jack Hearts",
"Queen Hearts",
"King Hearts",
"Ace Spades",
"2 Spades",
"3 Spades",
"4 Spades",
"5 Spades",
"6 Spades",
"7 Spades",
"8 Spades",
"9 Spades",
"10 Spades",
"Jack Spades",
"Queen Spades",
"King Spades",
};
main ()
{
int deck [NUMBER_OF_SHUFFLES + 1] [NUMBER_OF_CARDS];
int i;
int j;
int half = NUMBER_OF_CARDS / 2;
for (j = 0; j < NUMBER_OF_CARDS; j++)
deck [0] [j] = j;
for (i = 1; i <= NUMBER_OF_SHUFFLES; i++)
{
for (j = 0; j < half; j++)
{
deck [i] [2 * j] = deck [i - 1] [j];
deck [i] [2 * j + 1] = deck [i - 1] [half + j];
}
fprintf (stdout, "\nResults of shuffle %d:\n", i);
for (j = 0; j < NUMBER_OF_CARDS; j++)
fprintf (stdout, " %s\n", cards [deck [i] [j]]);
}
}