加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4163 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   

头像
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: *
推文 x 鲜花 x
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] 关于扑克牌发牌

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] | Posted:2007-12-04 22:41 |
rainfalling 手机
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x1
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

小弟简单的写了一个,但并不完整。你可以参考一下。
Runtime: VC6

复制程式
#include <stdio.h>
#include <time.h>
#include <vector>
#include <algorithm>
#define CARDCOUNT 52 // 52张牌

using namespace std;

vector<int> pk_card(CARDCOUNT);

// 初始化整付牌
void Initialize() {
       for(int i=0; i<CARDCOUNT; i++)
              pk_card[i] = i+1;

       srand(time(NULL));
}

// 随机取得一张牌
int GetCard() {
       int retVal = -1;
       int remover = rand() % pk_card.size();
       retVal = pk_card[remover];
       pk_card.erase(pk_card.begin() + remover);
       return retVal;
}

// 判断花色
char GetPattern(int card) {
       char retVal = 'N'
       double temp = card / 13.0;
       if(temp > 0.0 && temp <= 1.0)
              retVal = 6; // ascii code
       else if(temp > 1.0 && temp <= 2.0)
              retVal = 3; // ascii code
       else if(temp > 2.0 && temp <= 3.0)
              retVal = 4; // ascii code
       else if(temp > 3.0 && temp <= 4.0)
              retVal = 5; // ascii code
       return retVal;
}

// 判断数字
char* GetNumber(int card) {
       char *retVal = (char *)malloc(2);
       int temp = card % 13;
       if(temp == 0)
              retVal = "K";
       else if(temp == 12)
              retVal = "Q";
       else if(temp == 11)
              retVal = "J";
       else {
              itoa(temp, retVal, 10);
       }
       return retVal;
}

// 判断重复
char* DetermineDuplicate(int cards[], int card_size) {
       char *retVal = (char *)malloc(100);
       int maxDup = 0, maxDupLoc = 0;
       int dupCount[13] = {0};
       
       for(int i=0; i<card_size; i++)
              dupCount[(cards[i]-1) % 13]++;

       for(int j=0; j<13; j++) {
              if(maxDup < dupCount[j]) {
                     maxDup = dupCount[j];
                     maxDupLoc = j;
              }
       }
       if(maxDup < 2)
              retVal = "There are no duplicate cards";
       else
              sprintf(retVal, "There are %d cards with the same point %s", dupCount[maxDupLoc], GetNumber(maxDupLoc+1));

       return retVal;
}

int main(int argc, char **argv) {
       Initialize();
       
       int card_a[5], card_b[5];
       for(int i=0; i<5; i++) {
              card_a[i] = GetCard();
              card_b[i] = GetCard();
       }
       
       printf("A's card: ");
       for(int j=0; j<5; j++) {
              printf("%c%s ", GetPattern(card_a[j]), GetNumber(card_a[j]));
       }
       printf("\n");

       printf("B's card: ");
       for(int k=0; k<5; k++) {
              printf("%c%s ", GetPattern(card_b[k]), GetNumber(card_b[k]));
       }
       printf("\n");

       printf("For A: %s\n", DetermineDuplicate(card_a, 5));
       printf("For B: %s\n", DetermineDuplicate(card_b, 5));
       
       return 0;
}


献花 x0 回到顶端 [1 楼] From:台湾台北市 | Posted:2007-12-12 19:31 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.020621 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言