问题 D: 扑克牌排序(结构体)

问题 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_41956151/article/details/88831502
今日推荐