麻将胡牌算法 1

#include <stdio.h>

#include <stdlib.h>

#include<string.h>

char tNums[10];//存放输入牌的所有条

int countT = 0;

char wNums[10];//存放输入牌的所有万

int countW = 0;

char dNums[10];//存放输入牌的所以筒

int countD = 0;

char *nums[40][40];//存放输入的所有牌

typedef struct _pai{

char num;

char kind;

} Pai[20];

int judegeNums(char n[],int count){

if(count > 0){

char temp = n[0];

int i,j ;

for(i = 0; i < count-1; i ++){

for(j = i+1; j < count; j ++){

if(n[i] > n[j]){

temp=n[i];

n[i]=n[j];

n[j]=temp;

}

}

}

int startIndex = 1;

char doubleList[10] = {n[0]};

int doubleCount =1;

char orderList[10] = {n[0]};

int orderCount = 1;

while(startIndex < count){

if(doubleCount == 0 && orderCount ==0){

doubleList[0] = n[startIndex];

orderList[0] = n[startIndex];

doubleCount ++;

orderCount ++;

startIndex ++;

continue;

}

if(n[startIndex] == doubleList[0]){

doubleCount = 0;

orderCount = 0;

}else if(n[startIndex] == orderList[orderCount-1]+1){

doubleCount = 0;

orderList[orderCount] =n[startIndex];

orderCount ++;

if((orderCount % 3) == 0){

orderCount = 0;

}

}else{

return 0;

}

startIndex ++;

}

}

return 1;

}

void main(){

int isRightK = 1;

int isRightN = 1;

printf("Please enter your nums:\n");

//1 输入几张牌 存到nums数组里面

int count = 0; //记录输入了几张牌

Pai pai;

while(1){

char num[10];

scanf("%s",&num);

if(num[0] != '0'){

if(strlen(num) == 2){

if(num[0])

pai[count].num=num[0];

pai[count].kind=num[1];

count ++;

}else{

printf("请输入合法的牌!");

}

}else{

break;

}

}

int i ;

printf("您的牌为:");

for(i = 0; i < count; i ++){

//将随机输入的14张牌按花色分组 分别存到tNums,wNums,dNums数组中

if(pai[i].kind == 'W'){

wNums[countW] = pai[i].num;

countW ++;

}else if(pai[i].kind == 'T'){

tNums[countT] = pai[i].num;

countT ++;

}else if(pai[i].kind == 'D'){

dNums[countD] = pai[i].num;

countD ++;

}else{

isRightK = 0;//花色不合法

}

if(pai[i].num>'9'||pai[i].num<'1'){

isRightN = 0;//牌面值不合法

}

printf("%c%c",pai[i].num,pai[i].kind);

}

printf("\n");

if(isRightK == 0 || isRightN ==0){

printf("您的牌不合法,请输入合法的牌!");

exit(0);

}

//2 验证牌是否是14张牌 小于或大于14则不能胡牌

if(count < 14){

printf("您的牌小于14张 不能胡牌!");

exit(0);

}

if(count > 14){

printf("您的牌大于14张 不能胡牌!");

exit(0);

}

//4 分别将三个数组内部排序,并看数组里面是否都是两个一样的字符或按三个连续字符的数组成

if(judegeNums(tNums,countT) == 1 &&

judegeNums(wNums,countW) == 1 &&

judegeNums(dNums,countD) == 1){

printf("恭喜

您,

胡牌啦!!");

}else{

printf("不能胡牌!");

}

//5 如果4中有一个数组不符合 则直接退出(不能糊牌),如果4中三个数组都符合 则能糊牌

}

#include <stdio.h>

#include <stdlib.h>

#include<string.h>

char tNums[10];//存放输入牌的所有条

int countT = 0;

char wNums[10];//存放输入牌的所有万

int countW = 0;

char dNums[10];//存放输入牌的所以筒

int countD = 0;

char *nums[40][40];//存放输入的所有牌

typedef struct _pai{

char num;

char kind;

} Pai[20];

int judegeNums(char n[],int count){

if(count > 0){

char temp = n[0];

int i,j ;

for(i = 0; i < count-1; i ++){

for(j = i+1; j < count; j ++){

if(n[i] > n[j]){

temp=n[i];

n[i]=n[j];

n[j]=temp;

}

}

}

int startIndex = 1;

char doubleList[10] = {n[0]};

int doubleCount =1;

char orderList[10] = {n[0]};

int orderCount = 1;

while(startIndex < count){

if(doubleCount == 0 && orderCount ==0){

doubleList[0] = n[startIndex];

orderList[0] = n[startIndex];

doubleCount ++;

orderCount ++;

startIndex ++;

continue;

}

if(n[startIndex] == doubleList[0]){

doubleCount = 0;

orderCount = 0;

}else if(n[startIndex] == orderList[orderCount-1]+1){

doubleCount = 0;

orderList[orderCount] =n[startIndex];

orderCount ++;

if((orderCount % 3) == 0){

orderCount = 0;

}

}else{

return 0;

}

startIndex ++;

}

}

return 1;

}

void main(){

int isRightK = 1;

int isRightN = 1;

printf("Please enter your nums:\n");

//1 输入几张牌 存到nums数组里面

int count = 0; //记录输入了几张牌

Pai pai;

while(1){

char num[10];

scanf("%s",&num);

if(num[0] != '0'){

if(strlen(num) == 2){

if(num[0])

pai[count].num=num[0];

pai[count].kind=num[1];

count ++;

}else{

printf("请输入合法的牌!");

}

}else{

break;

}

}

int i ;

printf("您的牌为:");

for(i = 0; i < count; i ++){

//将随机输入的14张牌按花色分组 分别存到tNums,wNums,dNums数组中

if(pai[i].kind == 'W'){

wNums[countW] = pai[i].num;

countW ++;

}else if(pai[i].kind == 'T'){

tNums[countT] = pai[i].num;

countT ++;

}else if(pai[i].kind == 'D'){

dNums[countD] = pai[i].num;

countD ++;

}else{

isRightK = 0;//花色不合法

}

if(pai[i].num>'9'||pai[i].num<'1'){

isRightN = 0;//牌面值不合法

}

printf("%c%c",pai[i].num,pai[i].kind);

}

printf("\n");

if(isRightK == 0 || isRightN ==0){

printf("您的牌不合法,请输入合法的牌!");

exit(0);

}

//2 验证牌是否是14张牌 小于或大于14则不能胡牌

if(count < 14){

printf("您的牌小于14张 不能胡牌!");

exit(0);

}

if(count > 14){

printf("您的牌大于14张 不能胡牌!");

exit(0);

}

//4 分别将三个数组内部排序,并看数组里面是否都是两个一样的字符或按三个连续字符的数组成

if(judegeNums(tNums,countT) == 1 &&

judegeNums(wNums,countW) == 1 &&

judegeNums(dNums,countD) == 1){

printf("恭喜

您,

胡牌啦!!");

}else{

printf("不能胡牌!");

}

//5 如果4中有一个数组不符合 则直接退出(不能糊牌),如果4中三个数组都符合 则能糊牌

}


相关文章

  • 麻将胡牌算法
  • #include #include #include char tNums[10];//存放输入牌的所有条 int countT = 0; char wNums[10];//存放输入牌的所有万 int countW = 0; char dN ...查看


  • 长沙麻将的游戏规则
  • 我打麻将比下象棋要早,3岁开始.我一直把麻将看成是技术含量很高的一种竞技项目. 应某豆友要求,总结一下我自己打麻将的心得.望以牌会友,大家多多交流. 今天主要围绕长沙麻将来谈. 一.起牌 长沙麻将总共由筒.索.万三色组成,每色有1-9,九号 ...查看


  • 颠覆你认知的人工智能:玩转艺术,琴棋书画文学通杀
  • 随着科技迅猛发展,人工智能(AI)已经越来越渗透进我们的生活,在自动驾驶.语音识别.医疗领域等等方面都有了突破性进展.人工智能会掀起一场工业革命,抢走我们的工作,甚至统治人类社会吗?有人就高呼狼来了--而如果你是大象,狼来了你又用得着害怕吗 ...查看


  • 中国的文化内涵
  • 下面从网上看到的一篇文章,文章中的观点也许过激,但是其举出的例证又让我无法辩驳.这就是丑陋的中国人吗?看后我无语-- 现在的西方有句俗语:别跟我耍中国人那一套!中国人的聪明是有名的,我们的"国粹"麻将牌即是一例.打麻将的 ...查看


  • 日本将归还中国国宝级麻将 包括溥仪御用麻将
  • 国际花边人民网[微博]2013-07-17 03:41 我要分享 1 岳飞"精忠报国"麻将 日本归还中国国宝"五彩螺钿牌" 系溥仪御用麻将 袁世凯的陶瓷牌 那些沉睡在日本麻将博物馆里多年的.传说中的国 ...查看


  • 四川--独领一番民俗风情
  • 四川--独领一番民俗风情 作为有着悠久历史文化的古蜀之国,四川得天独厚的自然风景和民俗风情孕育了一方儿女,展示了四川所承载的历史厚重感. 首先,要了解四川的民俗风情,得从四川的自然风景谈起.四川位于中国西南部,是西南三省之一,古就有相传&q ...查看


  • 打麻将总输怎么办?记住这3个麻将技巧口诀 出去打麻将让你稳赢
  • 打麻将游戏不仅是中国的国粹游戏,还是一种不仅休闲而且益智的棋牌游戏.相信很多朋友都喜欢打麻将,不过打麻将一半靠运气,一半靠技术.那么打麻将怎么才能赢?今天麻将大师给大家介绍3个麻将必胜技巧. 1.舍牌坚持四项原则. 打麻将实战中,一招一式都 ...查看


  • 欢乐麻将电脑版 如何在电脑上玩欢乐麻将
  • 欢乐麻将电脑版 如何在电脑上玩欢乐麻将 欢乐麻将电脑版下载,怎么在电脑上玩欢乐麻将呢,下面小编给大家带来欢乐麻将电脑版下载及安装教程,以供大家参考,祝大家游戏愉快! 欢乐麻将手游电脑版: 一.首先,下载欢乐麻将最新版本到你的电脑端,随便放哪 ...查看


  • [我的外婆作文]外婆的麻将瘾
  • "外婆,外婆,这周我们学校发生好多有趣的事情--""哟,小宝贝,等外婆回来再讲给我听.来不及了,来不及了,我先走了!"外婆丢下碗筷,匆匆披上外套,一路小跑着出了家门."妈,天气预报下午会有雨 ...查看


热门内容