从扑克牌中随机抽取5张牌,判断是不是一个顺子。

一、算法描述:

从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的2-10位数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字

二、算法解决:

在这个算法里,由于大小王可以是任意数字,所以即使像下面的5张牌,仍然可以是连续的。

图1

图2

所以说1的个数和数据之间的间隔和的关系决定了是不是一个连续的5个数。

以图2为例进行推导。

首先,先计算数组中含有0的个数。

IsZero = 2;

然后,将数组进行排序

图3

从数组numbers的4开始看数据间的间隔(numbers[i+1]-numbers[i]-1)

即从numbers[IsZero]开始进行统计

LenGap = 2

如果LenGap大于IsZero,则不能形成连续数组,否则可以形成连续数组。

三、算法实现:

算法通过Linux下运行的,主要包括continusCards.c,continusCards.h,main.c,Makefile四个文件

make
即可得到结果




CC = gcc
CFLAGS = -g

%.o:%.c
	$(CC) -o $@ -c $(CFLAGS) $<

main:main.o continusCards.o
	$(CC) main.o continusCards.o -o main $(CFLAGS)

clean:
	rm -rf *.o main


经验分享 程序员 微信小程序 职场和发展