uva11210 Chinese Mahjong

2024-06-12 17:58
文章标签 chinese mahjong uva11210

本文主要是介绍uva11210 Chinese Mahjong,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接触计算机这么长时间(仔细想想,可能也就1年多吧),第一次觉得中国人还是能占到便宜的。。。。。。

简单的模拟,判断手中的麻将牌是否“下胡”以及缺什么牌,估计老外做这题会花上一段时间读题吧。

基本按照麻将的规则模拟:


#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;char hand[4][9],output[4][9][10]={{"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"},};
int a,b,ok,have;void dfs(int cur)
{if(ok==1)return ;if(cur==4){ok=1,have=1;printf(" %s",output[a][b]);}int i,j;for(i=0;i<4;i++){for(j=0;j<9;j++){if(hand[i][j]>=3){hand[i][j]-=3;dfs(cur+1);hand[i][j]+=3;}}}for(i=0;i<3;i++){for(j=0;j<7;j++){if(hand[i][j]>=1&&hand[i][j+1]>=1&&hand[i][j+2]>=1){hand[i][j]--,hand[i][j+1]--,hand[i][j+2]--;dfs(cur+1);hand[i][j]++,hand[i][j+1]++,hand[i][j+2]++;}}}
}void slove()
{int i,j,k,t;have=0;for(i=0;i<3;i++){for(j=0;j<9;j++){if(hand[i][j]==4)continue;hand[i][j]++;a=i,b=j;ok=0;for(k=0;k<4;k++)//可以是4{for(t=0;t<9;t++){if(ok==0&&hand[k][t]>=2){hand[k][t]-=2;dfs(0);hand[k][t]+=2;}}}hand[i][j]--;}}for(i=0;i<7;i++){if(hand[i][j]==4)continue;hand[3][i]++;a=3,b=i;ok=0;for(k=0;k<4;k++){for(t=0;t<9;t++){if(ok==0&&hand[k][t]>=2){hand[k][t]-=2;dfs(0);hand[k][t]+=2;}}}hand[3][i]--;}if(have==0)printf(" Not ready");printf("\n");
}int main()
{char input[10];int count=0,all=1,i,j;memset(hand,0,36);while(scanf("%s",input)&&input[0]!='0'){count++;if(input[1]=='T')hand[0][input[0]-'1']++;else if(input[1]=='S')hand[1][input[0]-'1']++;else if(input[1]=='W')hand[2][input[0]-'1']++;else if(strcmp(input,"DONG")==0)hand[3][0]++;else if(strcmp(input,"NAN")==0)hand[3][1]++;else if(strcmp(input,"XI")==0)hand[3][2]++;else if(strcmp(input,"BEI")==0)hand[3][3]++;else if(strcmp(input,"ZHONG")==0)hand[3][4]++;else if(strcmp(input,"FA")==0)hand[3][5]++;else if(strcmp(input,"BAI")==0)hand[3][6]++;if(count==13){//for(i=0;i<4;i++)//{//    for(j=0;j<9;j++)//    printf("%d",hand[i][j]);//    puts("");// }printf("Case %d:",all++);slove();count=0;memset(hand,0,36);}}return 0;
}


这篇关于uva11210 Chinese Mahjong的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054930

相关文章

UVA11210麻将

最简单的胡法,四个三张+一对 先枚举第14张牌 然后找出1对的牌之后dfs搜索三张的搭配 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamRe

解决Can‘t load tokenizer for ‘bert-base-chinese‘.问题

报错提示: OSError: Can't load tokenizer for 'bert-base-chinese'. If you were trying to load it from 'https://huggingface.co/models', make sure you don't have a local directory with the same name. Otherwi

在Mysql数据库中执行函数报错: Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gb2312_chinese_ci,COERCIBLE) for operation ‘=’ 在操作MySQL数据库时,报“ error code [1267]; 在Mysql数据库中执行函数报错: Illeg

11210 - Chinese Mahjong(dfs)

题目:11210 - Chinese Mahjong 题目大意:给出十三个麻将, 问再取哪一个能胡?把所有的情况列出来,并且按照题目要求的顺序。胡的条件需要一个而且仅一个对,然后剩下要么是三个相同的,要么是三个连续的(前提是后缀相同,并且只有 T, S, W在考虑范围内) 解题思路:把要取的情况一个个枚举出来,然后dfs, 找是否加入这个可以胡就可以了,找的话就三种情况去判断一下。

无法解决 equal to 运算中 Chinese_PRC_90_CI_AS 和 Chinese_PRC_BIN 之间的排序规则冲突

这是因为数据库 oa 和 hh 的编码格式不一样导致的 select  groupname as oper_id,name as oper_name from security_users where name collate Chinese_PRC_CI_AS not in (select oper_name from PDA_UsersAndPWD )

跟《经济学人》学英文:2024年6月15日这期 Chinese electric vehicles (EVs)

The EU hits China’s carmakers with hefty new tariffs Duties will only hold them back for a while 欧盟对中国汽车制造商征收高额新关税 hit: 对xxx施加 在句子"The EU hits China’s carmakers with hefty new tariffs"中,“hits”的意思是

Llama3-8B-Chinese-Chat 聊天机器人

Llama3-8B-Chinese-Chat 聊天机器人 1. 创建虚拟环境2. 安装 pytorch3. 安装 transformers 和 gradio4. 开发 ui 代码5. 运行 ui 代码6. 访问 web ui 1. 创建虚拟环境 conda create -n llama3-chinese python=3.11 -yconda activate llama3-

使用Unsloth微调Llama3-Chinese-8B-Instruct中文开源大模型

微调Llama3-Chinese-8B-Instruct 微调是指在大规模预训练的基础模型上,使用特定领域或任务数据集进行少量迭代训练,以调整模型参数,提升其在特定任务上的表现。这种方法可以充分利用预训练模型的广泛知识,同时针对特定应用进行优化,达到更精准高效的效果。 Llama-3-Chinese-8B-Instruct Llama-2已经表现的很出色了,但其仅使用了2万亿Toke

HDU 3026 Chinese Chess 二分匹配(TLE...)

求有多少个点,满足不选这个点最大匹配减少,超时了,挖个坑, 以后实力够了在来填坑。。。 #include <cstdio>#include <cstring>#include <vector>using namespace std;const int maxn = 10010;const int maxm = 10010;bool vis[maxn];int y[maxn];in

HDU1788 Chinese remainder theorem again【中国剩余定理】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1788 题目大意: 题目前边的描述是多余的。。。一个正整N除以M1余M1-a,除以M2余M2-a,除以M3余M3-a, 即除以Mi余Mi-a(a < Mi < 100),求满足条件的最小的数。 思路: 这是一道中国剩余定理的基础题。由题目得出N % Mi + a = Mi,即