廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3403 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.138434 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言