30-08-2005, 12:06
|
|
|
|
חבר מתאריך: 04.08.02
הודעות: 4,468
|
|
...
קודם כל, הקוד שהבאת הוא מאוד מבולגן, לא מתועד וכנראה שלא קראת על הbucketsort/radix sort.
בכל מקרה, שכחת גם את הבעיה העיקרית, שהיא לא חלוקת הקלפים (הריי זה החלק הקל), החלק המסובך זה לייצר חבילת קלפים בצורה אקראית.
ברגע שאתה מצליח לייצר חבילת קלפים כזאת, קל מאוד לחלק את הקלפים באיזה צורה שתרצה.
עכשיו, מכיוון שאתה משתמש בCPP, אז למה לא להשתמש בSTL וזהו? יש להם מימוש לאלגוריתם של knuth על shuffle.
אז כתבתי לך סקיצה של קוד פה, והשארתי לך פונקציה אחת שתממש אותה כתרגול.
קוד:
#include <iostream>
#include <algorithm>
#include <time.h>
#define MAX_CARDS 52
class Deck {
public:
Deck() { int i; for( i=0; i<MAX_CARDS; i++ ) cards[i] = i+1; }
void shuffle( void );
void print( void );
//void deal( Player , Player ); -> think about it.
private:
int cards[52];
};
void Deck::shuffle( void ) {
std::random_shuffle( cards, cards + MAX_CARDS );
}
void Deck::print( void ) {
int i;
for( i=0; i<MAX_CARDS; i++ )
std::cout << cards[i] << " ";
}
int main( void )
{
Deck cards;
srand( time( NULL ) );
std::cout << "using shuffle on deck" << std::endl;
cards.shuffle();
cards.print();
std::cout << std::endl;
return 0;
}
|