问题 D: 扑克牌排序(结构体)
时间限制: 1 Sec 内存限制: 128 MB
提交: 666 解决: 284
[提交][状态][讨论版]
题目描述
自定义结构体表示一张扑克牌,包含类型——黑桃、红桃、梅花、方块、王;大小——2,3,4,5,6,7,8,9,10,J,Q,K,A,小王(用0表示)、大王(用1表示)。输入n,输入n张扑克牌信息,从大到小输出它们的排序结果。
假设扑克牌的排序规则是大王、小王为第一大、第二大,剩余52张扑克牌按照先花色后大小排序。
花色:黑桃>红桃>梅花>方块。
大小: A>K>Q>J>>10>9>...>2。
提示:百度sort函数、strstr函数使用。
输入
测试次数t
每组测试数据两行:
第一行:n,表示输入n张扑克牌
第二行:n张扑克牌信息,格式见样例
输出
对每组测试数据,输出从大到小的排序结果
样例输入
3
5
黑桃4 红桃10 梅花Q 方块K 黑桃A
10
大王 梅花10 红桃K 方块9 黑桃2 梅花A 方块Q 小王 黑桃8 黑桃J
5
红桃K 梅花K 黑桃K 方块K 小王
样例输出
黑桃A 黑桃4 红桃10 梅花Q 方块K
大王 小王 黑桃J 黑桃8 黑桃2 红桃K 梅花A 梅花10 方块Q 方块9
小王 黑桃K 红桃K 梅花K 方块K
代码如下:
#include <iostream>
#include <algorithm>//sort
// Sort函数有三个参数:
//(1)第一个是要排序的数组的起始地址。
//(2)第二个是结束的地址(最后一位要排序的地址的下一地址)
//(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
#include<string.h>//strstr
//从字符串str1中查找是否有字符串str2, 如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。
using namespace std;
struct Poker{
char flower[100];
};
int getvalue(char str[]){
int quan;
if (strstr(str,"黑桃")) {
quan=4;
}
if (strstr(str,"红桃")) {
quan=3;
}
if (strstr(str,"梅花")) {
quan=2;
}
if (strstr(str,"方块")) {
quan=1;
}
int wei;
if (strstr(str,"A")) {
wei=14;
}
if (strstr(str,"K")) {
wei=13;
}
if (strstr(str,"Q")) {
wei=12;
}
if (strstr(str,"J")) {
wei=11;
}
if (strstr(str,"10")) {
wei=10;
}
if (strstr(str,"9")) {
wei=9;
}
if (strstr(str,"8")) {
wei=8;
}
if (strstr(str,"7")) {
wei=7;
}
if (strstr(str,"6")) {
wei=6;
}
if (strstr(str,"5")) {
wei=5;
}
if (strstr(str,"4")) {
wei=4;
}
if (strstr(str,"3")) {
wei=3;
}
if (strstr(str,"2")) {
wei=2;
}
// cout<<"输出"<<(quan+(wei-1)*4)<<endl;
return (quan*14+wei);
}
int main() {
int t;
cin>>t;
while (t--) {
int test;
cin>>test;
Poker cod[test];
for (int i = 0; i <test ; ++i) {
cin>>cod[i].flower;
}
for (int i = 0; i <test ; ++i)
{
if (strstr(cod[i].flower,"大王")!=NULL) {
cout<<"大王"<<" ";
}
}
for (int i = 0; i <test ; ++i)
{
if (strstr(cod[i].flower,"小王")!=NULL) {
cout<<"小王"<<" ";
}
}
for (int i = 0; i <test ; ++i) {
if (strstr(cod[i].flower,"大王")!=NULL||strstr(cod[i].flower,"小王")!=NULL) {
continue;
}
for (int j = i+1; j <test ; ++j) {
if (strstr(cod[j].flower,"大王")!=NULL||strstr(cod[j].flower,"小王")!=NULL) {
continue;
}
if (getvalue(cod[i].flower)<getvalue(cod[j].flower)) {
Poker temp;
temp=cod[j];
cod[j]=cod[i];
cod[i]=temp;
}
}
}
for (int i = 0; i < test; ++i) {
if (strstr(cod[i].flower,"大王")!=NULL||strstr(cod[i].flower,"小王")!=NULL) {
continue;
}
cout<<cod[i].flower<<" ";
}
cout<<endl;
}
return 0;
}