从扑克牌中随机抽取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