模拟 hihoCoder 1177 顺子

 

题目传送门

 1 /*
 2     模拟:简单的照着规则做就可以了,把各种情况考虑到,虽然比赛写的丑了点,但能1Y还是很开心的:)
 3 */
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <iostream>
 7 #include <algorithm>
 8 #include <cmath>
 9 using namespace std;
10 
11 const int MAXN = 1e2 + 10;
12 const int INF = 0x3f3f3f3f;
13 struct Card
14 {
15     int v, w;
16 }ca[10];
17 char s[10][10];
18 
19 bool cmp(Card x, Card y)    {return x.v < y.v;}
20 
21 int main(void)        //hihoCoder 1177 顺子
22 {
23     while (scanf ("%s %s %s %s", s[1], s[2], s[3], s[4]) == 4)
24     {
25         int pre = 0;    bool ok = true;
26         for (int i=1; i<=4; ++i)
27         {
28             int len = strlen (s[i]);
29             if (s[i][0] == 'A')    ca[i].v = 14;
30             else if (s[i][0] == 'J')    ca[i].v = 11;
31             else if (s[i][0] == 'Q')    ca[i].v = 12;
32             else if (s[i][0] == 'K')    ca[i].v = 13;
33             else
34             {
35                 if (len == 3)    ca[i].v = 10;
36                 else    ca[i].v = s[i][0] - '0';
37             }
38             int p = 1;    if (len == 3)    p = 2;
39             if (s[i][p] == 'S')    ca[i].w = 1;
40             else if (s[i][p] == 'H')    ca[i].w = 2;
41             else if (s[i][p] == 'C')    ca[i].w = 3;
42             else if (s[i][p] == 'D')    ca[i].w = 4;
43             if (i == 1)    pre = ca[1].w;
44             else
45             {
46                 if (ca[i].w != pre)    ok = false;        //是否四张牌都相同花色
47             }
48         }
49 
50         sort (ca+1, ca+1+4, cmp);
51         int flag = 0;    bool no = false;
52         for (int i=2; i<=4; ++i)
53         {
54             if (ca[i].v - ca[i-1].v == 1)    continue;
55             else if (ca[i].v - ca[i-1].v == 2)
56             {
57                 if (!flag)    flag = i;
58                 else no = true;
59             }
60             else    no = true;
61         }
62 
63         if (no)    puts ("0/1");        //若有来两个地方不是连续的则不可能是顺子
64         else
65         {
66             if (flag)        //如果在中间插入牌
67             {
68                 if (ok)    {puts ("1/16");}
69                 else {puts ("1/12");}
70             }
71             else        //两侧插牌
72             {
73                 if (ok)
74                 {
75                     if (ca[1].v == 2 || ca[4].v == 14)    puts ("1/16");
76                     else    puts ("1/8");
77                 }
78                 else
79                 {
80                     if (ca[1].v == 2 || ca[4].v == 14)    puts ("1/12");
81                     else    puts ("1/6");
82                 }
83             }
84         }
85     }
86 
87     return 0;
88 }

 

转载于:https://www.cnblogs.com/Running-Time/p/4576485.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值