首页 > 解决方案 > 如何比较打印的数组索引以查看它们是否是一对

问题描述

从牌堆中抽 2 张牌并检查它们是否是一对(具有相同的等级)。重复此操作至少 1000 次,并计算从一副牌中抽出一对的概率。

#include <iostream>
#include <cstdlib> 
#include <cstdio>
#include <string>

using namespace std;

int counter;


string facevalue[] = { "Two", "Three", "Four", "Five", "Six", "Seven", "Eight","Nine", "Ten", "Jack", "Queen", "King", "Ace" };


string suit [] = { "Diamonds", "Hearts", "Spades", "Clubs" };

string getcard() {
    string card;
    int cardvalue = rand() % 13;
    int cardsuit = rand() % 4;

    card += facevalue[cardvalue];
    card += " of ";
    card += suit[cardsuit];

    if(cardvalue = cardvalue){
        counter = counter + 1;
    }


    return card;
}

int main() {
    int numberofcards = 2;
    int times = 1000;


    for (int y =0; y < times; y++){

    cout<<" "<<endl;

    for (int i = 0; i < numberofcards; i++) {
        cout << "You drew a " << getcard() << endl;

     }
     }

     cout<<"counter: "<<counter<<endl;




} 

所以在这里,cardvalue 控制从数组中打印出的内容。因此,如果 cardvalue 为 1,则 facevalue[cardvalue] 将是 facevalue[1],它将打印出“二”。

所以现在我正在尝试确定从牌组中随机挑选 2 张牌时 cardvalue 有多少次相同。

我做了

    if(cardvalue = cardvalue){
        counter = counter + 1;
    }

我得到的结果是 926,这意味着当从一副牌中抽出 2 张牌 1000 次时,有 926 次牌值相同。这似乎不对,如果有人可以纠正我的程序或指导我完成整个过程,将不胜感激。

我试过 (cardvalue == cardvalue)
但我得到了 counter : 2000 。

标签: c++arraysplaying-cards

解决方案


首先删除您的全局计数器变量,这是一种不好的做法。

然后你可以尝试这样的事情:

int main() {
    int numberofcards = 2;
    int times = 1000;
    int counter = 0;

    std::map<string, int> cardMap;
    string currentCard;
    int maxNbSameCard;
    for (int y =0; y < times; y++){
       cardMap.clear();
       maxNbSameCard = 0;
       for (int i = 0; i < numberofcards; i++) {
          currentCard = getcard();
          cardMap[currentCard]+=1;

          cout << "You drew a " << currentCard << endl;
          cout << "It is the " << cardMap[currentCard] << " time you get this card" << endl;
          if(maxNbSameCard < cardMap[currentCard]) maxNbSameCard = cardMap[currentCard];
         }
     if(maxNbSameCard > 1) ++counter;
     }

     cout<<"counter: "<<counter<<endl;
} 
  1. 请注意,“=”是一种做作而不是比较。
  2. 计数对不是 getcard() 的工作,它只是一个卡片创建者,它对以前创建的卡片没有可见性。

推荐阅读