zoukankan      html  css  js  c++  java
  • Chinese Mahjong

    OJ题号:UVa11210

    思路:

    首先字符串处理读入手牌,str数组将手牌和数字对应,接下来搜索,先搜对子,如果搜过对子就不搜了。由于对子有且只有一个,可以在搜到以后直接跳出。同时注意一副麻将中每种牌只有4个,所以不能作为将。

     1 #include<cstdio>
     2 #include<string>
     3 #include<vector>
     4 #include<sstream>
     5 #include<iostream>
     6 using namespace std;
     7 vector<int> mahjong;
     8 const string str[35]={"","1T","2T","3T","4T","5T","6T","7T","8T","9T","1S","2S","3S","4S","5S","6S","7S","8S","9S","1W","2W","3W","4W","5W","6W","7W","8W","9W","DONG","NAN","XI","BEI","ZHONG","FA","BAI"};
     9 void input(string line,vector<int> &ans) {
    10     ans.clear();
    11     for(int i=0;i<35;i++) ans.push_back(0);
    12     stringstream ss(line);
    13     string temp;
    14     for(int i=0;i<13;i++) {
    15         ss>>temp;
    16         for(int j=1;j<=34;j++) {
    17             if(temp==str[j]) {
    18                 ans[j]++;
    19                 break;
    20             }
    21         }
    22     }
    23 }
    24 bool duizi=0,flag=0;
    25 int ting;
    26 bool hu() {
    27     for(int i=1;i<=34;i++) {
    28         if(mahjong[i]) {
    29             goto Try;
    30         }
    31     }
    32     cout<<" "+str[ting];
    33     flag=1;
    34     return 1;
    35     Try:
    36     if(!duizi) {
    37         for(int i=1;i<=34;i++) {
    38             if(mahjong[i]>=2) {
    39                 mahjong[i]-=2;
    40                 duizi=1;
    41                 bool f=hu();
    42                 duizi=0;
    43                 mahjong[i]+=2;
    44                 if(f) return 1;
    45             }
    46         }
    47         return 0;
    48     }
    49     for(int i=1;i<=34;i++) {
    50         if(mahjong[i]>=3) {
    51             mahjong[i]-=3;
    52             bool f=hu();
    53             mahjong[i]+=3;
    54             if(f) return 1;
    55         }
    56     }
    57     for(int i=1;i<=27;i++) {
    58         if(i==8||i==9||i==17||i==18||i==26||i==27) continue;
    59         if(mahjong[i]&&mahjong[i+1]&&mahjong[i+2]) {
    60             mahjong[i]--;
    61             mahjong[i+1]--;
    62             mahjong[i+2]--;
    63             bool f=hu();
    64             mahjong[i]++;
    65             mahjong[i+1]++;
    66             mahjong[i+2]++;
    67             if(f) return 1;
    68         }
    69     }
    70     return 0;
    71 }
    72 int main() {
    73     int turn=0;
    74     while(1) {
    75         string s;
    76         getline(cin,s);
    77         if(s=="0") break;
    78         turn++;
    79         printf("Case %d:",turn);
    80         mahjong.clear();
    81         input(s,mahjong);
    82         flag=0;
    83         for(ting=1;ting<=34;ting++) {
    84             if(mahjong[ting]==4) continue;
    85             mahjong[ting]++;
    86             hu();
    87             mahjong[ting]--;
    88         }
    89         if(!flag) printf(" Not ready");
    90         printf("
    ");
    91     }
    92     return 0;
    93 }

    注:本随笔整理自QQ空间旧文。发布时间为2017年1月22日。

    查看原文

  • 相关阅读:
    Devops运维交流群
    CentOS7.5下二进制安装MySQL5.7.26
    CentOS7.5安装MySQL8.0.18简易流程
    Kubernetes中的Pod生命周期详解
    Linux系统发行版本及其区别
    数据库设计
    Vue 起步
    CSS 中的伪类和伪元素
    百度智能云虚拟主机 Typecho 分类功能失效 | 开启伪静态地址
    C#开发BIMFACE系列39 网页集成开发3:审图系统中三维模型比对
  • 原文地址:https://www.cnblogs.com/skylee03/p/6817052.html
Copyright © 2011-2022 走看看