題目:C++撲克牌比大小
問題描述 :
撲克牌的遊戲有很多種,像是大老二、撿紅點等。然而,現在您要參與的是比大小遊戲,每張牌各有其花色和數字,大小比較主要以花色為主,黑桃 > 紅心 > 方塊 > 梅花;倘若花色相同時,則比較數字。
輸入說明 :
第一列的整數,代表撲克牌的疊數,其後有若干列,每列即為一疊牌的內容,每張牌分別以英文、數字作表示,其中 S 代表黑桃、 H 代表紅心、 D 代表方塊、 C 代表梅花。每筆資料分別以空白隔開。
輸出說明 :
印出排列過後的撲克牌。一行是一 疊 牌, 每張牌以空白隔開。
這題的概念是看大家會不會分批判斷大小,一關一關過,對於新手來說會比較難想
不過放心,這題只要一步一步都做好就行喽!!
題目一開始要我們輸入資料個數,這算是老打法了,大家就記得打完幾筆後要用 cin.ignore();來躲掉換行
之後將打的資料全轉成字串,再一一把他們切出來放在一維陣列裡
之後用好用的sort排大小啦(標頭檔記得打喔!!)
ㄟ~~不過sort不是知能用於數字大小嗎?
但這題有英文ㄟ0A0
其實sort()他括號裡是塞這些三樣東西
sort(arr.begin(),arr.end(),cmp規則);
也就是把陣列位置0到n裡的去按照規則做排序
他裏頭的排法是2筆做比較,所以她只有兩種答案
假如arr陣列中,arr[0]比較arr[1]大的話回傳true;反之,傳false
bool布林值得功能就很好用
bool cmp(string a,string b)
{
<----我是規則程式碼---->
}
cmp裡的東西就是題目的要求
讀懂題目的各位會發現,剛開始先筆就第一個英文字母,而字母的大小剛好跟ASCII相同
所以第一個if知道後之後就是如果字母相同,那就是比數字啦
然而先別傻傻的真的去筆,到最後你會發現,有些它是十位數ㄟ,怎一對一筆阿(*'^´)=3
so,去比他們的長度,例如C13和C5誰比較大,膝蓋想也知道是C13
它的長度是3,C5則是2
於是搞定玩一個else if裡的其中一個if後還有2種狀況
1.長度一樣且長度是2(例如:C1和C2
2.長度一樣且長度是3(例如:C11和C12
用完規則後再一一印出來
這題其實就是把規則用好,剩下就很簡單了
如果你對sort有興趣分享這個給你看看啦( ^_^)_~~丟
END
code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <string>
#include<vector>
#include <stdlib.h>
#include <iostream>
using namespace std;
vector<string> buf;
int getCode(string s);
bool cmp(string a, string b);
int main()
{
int many,i;
char a;
scanf("%d", &many);
scanf("%c", &a);
char str[100];
char delim[] = " ";
char * pch;
char arr[100][100];
bool x;
for (i = 0; i < many; i++)
{
gets(str);
pch = strtok(str, delim);
while (pch != NULL)
{
string s(pch);
buf.push_back(s);
pch = strtok(NULL, delim);
}
sort(buf.begin(), buf.end(), cmp);
for (int i = 0; i < many; i++)
{
for(int j=0;j<buf.size();j++)
{
strcpy(arr[i], buf[j].c_str());
}
}
}
for (int i = 0; i < many; i++)
{
for(int j=0;j<buf.size();j++)
{
printf("%s ",arr[i][j]);
}
printf("\n");
}
}
int getCode(string s)
{
int v;
switch (s[0])
{
case 'S':
v = 400;
break;
case 'H':
v = 300;
break;
case 'D':
v = 200;
break;
case 'C':
v = 100;
break;
}
v = v + atoi((s.c_str() + 1));
return v;
}
bool cmp(string a, string b)
{
return getCode(a) > getCode(b);
}
留言列表