2011-07-08 7 views
0

以下のプログラムは、「ペア」と「フラッシュ」を探しているとします。それは10,000の手からなる10試行を繰り返し、各手は5枚のカードで構成されています。結果は各試行ごとに一意の結果を反映する10行で構成されます(もちろん現在はありません)。私は立ち往生しています...事前に感謝します。C++カードを反復してペアを探してフラッシュするのに役立つ

#include "card.h" 
#include "deck.h" 
#include "game1.h" 
#include <iostream> 
#include <time.h> 
#include <stdlib.h> 

using namespace std; 


int main() { 

int pair = 0; 
int flush = 0; 
int h; //Hands 
int c; //Cards 
int t; //Trials 

const int MAXTRIALS = 10; 
const int MAXHANDS = 10000; 
const int MAXCARDS = 5; 
const int MAXSHUFFLE = 100; 

Deck myDeck; 
Card myCards[MAXCARDS]; 
myDeck.shuffle(MAXSHUFFLE);       //How often would you shuffle? 

srand((unsigned)time(NULL));      //Randon initilizer 

for (t = 0 ; t < MAXTRIALS; ++t)     //Outermost loop for the Trials 
{ 

    for (h = 0; h < MAXHANDS; ++h)     //InnerLoop for Hands 
    { 

     myCards[0] = myDeck.getCard(); 
     for (c = 1; c < MAXCARDS; ++c)    //InnerMost Loop for Cards 
     { 
      myCards[c] = myDeck.getCard(); 
      if (myCards[c].getValue() == myCards[0].getValue()) 
      { 
       pair++;     
      } 

      if (myCards[c].getSuit() == myCards[0].getSuit()) 
      { 
       flush++;       
      } 

      myDeck.addCard(myCards[c]); 
      c++; 

     } 
     myDeck.shuffle(MAXSHUFFLE); 
     h++; 
    } 

    cout << "pairs: " << pair << "\tflushes: " << flush << endl; 

} 
cin.get(); 
} 

enter image description here

+1

試してみましたか? – littleadv

+2

私は、トリプルネストされた 'for'ループではなく、いくつかの関数が利用されていれば解決する方がはるかに簡単だと思います –

答えて

0

...

1)は、myDeck.getCard()が二度同じカードを引くしないことを、確認しましたか?それともあなたの仕事のために重要ではありませんか?

2)myDeck.addCard(myCards[c])は正確に何をしていますか?

3)なぜループカウンタを2回増分するのですか? c++

これが確認された場合は、最初のカードとのみ比較しています。

// first draw the complete hand 
for(int card = 0; card < MAX_CARDS; ++card) 
{ 
    myCards[card] = myDeck.getCard(); 
} 
// now that we have the full hand, compare each card against each other card 
for(int start = 0; start < MAXCARDS-1; ++start) 
{ 
    for(int compare = start+1; compare < MAXCARDS; ++compare) 
    { 
     if (myCards[start].getValue() == myCards[compare].getValue()) 
     { 
      pair++ 
     } 
     // do similar for flushs 
    } 
} 

が、私はこのコードをテストしていないが、これはあなたのスタートを与える必要があります:あなたは完全に手を比較したい場合は、あなたのコードは次のようになります。

片手に2つのペアがあっても、これはすべてのペアをカウントします。ペアが見つかった場合は、ループから脱出するために追加のコードが必要になります。

はところで:私はあなたの質問を理解していれば、「結果は...各試行のためのユニークな結果を反映した10行で構成されなければならない」

0

c++h++は(あなたが本当に唯一の他のすべての項目をタッチすることを意味しなかった)少し怪しいですか?しかし、あなたが何を観察しているかについての情報がなければ、決定的な答えを出すのは難しいでしょう。また

、あなたのコードに関するいくつかのマイナーな文体勧告:

  1. 私は、彼らが必要とされる最初のポイントに「H」、「C」、および「T」の宣言を先延ばしお勧めしますfor-loopで宣言します(例:for(int h = 0; h < ...; h ++))。
  2. static_castをC++コード(つまりsrand(static_cast(time(NULL))))に使用するのは、Cスタイルのキャストを使用するよりも慣れていますが、どちらの形式も正しいです。正確にどうするかを推測するの多い
1

、問題は単にあなたそのドンである...私には宿題のように見えます各試行の間にpairflushカウンタ変数をリセットしないでください。次のようなものがあります:「試行」forループが始まるところでは、このトリックを実行する必要があります。

for (t = 0 ; t < MAXTRIALS; ++t) 
{ 
    pair = 0; 
    flush = 0; 

    // the remainder as is... 
関連する問題