广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3402 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
sancra
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] 关于扑克牌发牌
老师要求的程式作业:
1.玩家a,玩家b各发5张牌
2.发牌必须为乱数发牌
3.玩家b的牌一定要有一对(但也是乱数),玩家a不一定
4.程式要能判断是否出现一对


不知道这样问题是否交待得够清楚
我有参考版上几位前辈所写的相关程式
可是现在碰到了两个问题:

1.complier有过,可是无法run
2.感觉程式东凑西凑,我也不知道跑出来会变怎样,因为我看不到结果阿......

以下是程式码,请各位高手指点一下,谢谢

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define total 52
int pokerrandom(int [],int max); /*determine which poker can get*/

int result();

int main(void)
{
int poker;
int i, j, tmp, out,a=13,P=0,e=0;


for(i = 1; i <= total; i++) /*define the array*/
poker = i;

srand(time(0));

for(i = 1; i <= total; i++) /*give the ..

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



[ 此文章被adelin在2007-12-06 13:38重新编辑 ]



献花 x0 回到顶端 [楼 主] From:台湾 | 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.052221 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言