zoukankan      html  css  js  c++  java
  • 蓝桥杯 12-2扑克排序 字符串操作

    问题描述
      扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是2-10、J、Q、K和A,花色从小到大是方块(diamond)、梅花(club)、红桃(heart)、黑桃(spade)。两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。
      输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2 s 3 h 3 s A d J c
      输出结果应为:2 s 3 h 3 s J c A d数组长度固定为5。
    样例输出
    与上面的样例输入对应的输出。
    例:
    双关键字排序。
    不过关键是这个输入是一行字符串,需要读入一行字符串,然后一点一点操作。
    首先意识到一点:
    除了数字10占了两位,其他都是一位字符表示数字,紧跟着一位字符表示花色。
    然后把J当作11,Q12,K13,A14。
    花色从小到大:方块d为1,梅花c为2,红桃h为3,黑桃s为4。
    然后就可以做出来了。
    细节还是很多的。
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 struct node{ 
     4     char color; //花色d,c,h,s 
     5     int num; //对应的扑克牌数字用对应的实际数字表示,2~14 
     6     int c; //对应的花色用对应的数字表示,便于比较 1~4 
     7 } nd[5];
     8 int check(char t) { //花色转数字 
     9     switch (t) {
    10         case 'd': return 1;
    11         case 'c': return 2;
    12         case 'h': return 3;
    13         case 's': return 4;
    14     }
    15 } 
    16 int judge(char c) { //A,J,Q,K转数字 
    17     switch (c) {
    18         case 'A': return 14;
    19         case 'J': return 11;
    20         case 'Q': return 12;
    21         case 'K': return 13;
    22     }
    23 }
    24 bool cmp(node n1, node n2) {
    25     if (n1.num != n2.num) {
    26         return n1.num < n2.num;
    27     }
    28     return n1.c < n2.c;
    29 } 
    30 int main() {
    31     string s;
    32     cin >> s;
    33     int k = 0; 
    34     for (int i = 0; i < s.length(); i += 2) {
    35         if (s[i] == '1') { //数字为10的情况单独处理 
    36             nd[k].num = 10;
    37             nd[k].color = s[i + 2];
    38             nd[k].c = check(nd[k].color); //把花色转为数字 
    39             i++;
    40             k++;
    41         } else if (s[i] >= '2' && s[i] <= '9') {
    42             nd[k].num = s[i] - '0';
    43             nd[k].color = s[i + 1];
    44             nd[k].c = check(nd[k].color); //把花色转为数字 
    45             k++;
    46         } else {
    47             nd[k].num = judge(s[i]);
    48             nd[k].color = s[i + 1];
    49             nd[k].c = check(nd[k].color); //把花色转为数字 
    50             k++;
    51         }
    52     }
    53     sort(nd, nd + 5, cmp);
    54     for (int i = 0; i < 5; i++) {
    55         if (nd[i].num >= 11) {
    56             switch (nd[i].num) {
    57                 case 11: cout << 'J'; break;
    58                 case 12: cout << 'Q'; break;
    59                 case 13: cout << 'K'; break;
    60                 case 14: cout << 'A'; break;
    61             }
    62         } else {
    63             cout << nd[i].num;
    64         }
    65         cout << nd[i].color << " ";
    66     }
    67     return 0;
    68 }
  • 相关阅读:
    Typekit在线字库及使用方法
    SVG基础图形和D3.js
    CSS3 媒体查询@media 查询(响应式布局)
    Bootstrap 栅格系统(布局)
    CSS——图片替换方法:Fahrner图片替换法(FIR)
    CSS sprites(css 精灵):将小图标整合到一张图片上
    [html]点击button后画面被刷新原因:未设置type="button"
    [java]No qualifying bean of type 解决方法
    [eclipse]eclipse设置条件断点Breakpoint Properties
    Intent的setFlag和addFlag有什么区别?
  • 原文地址:https://www.cnblogs.com/fx1998/p/12718942.html
Copyright © 2011-2022 走看看