从扑克牌中随机抽取5张牌,判断是不是一个顺子。
2016-04-07 14:12
519 查看
一、算法描述:
从扑克牌中随机抽取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四个文件
从扑克牌中随机抽取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即可得到结果
/************************************************************************* > File Name: continusCards.c > Author: cyf > Mail: XXX@qq.com > Created Time: 2016年04月06日 星期三 14时56分30秒 ************************************************************************/ #include "continusCards.h" /* * 从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的 * 2-10位数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字 * */ int InsertSort(int *numbers, int length) { int ret = 0; if (numbers == NULL || length < 1) { ret = -1; printf("func InsertSort() err:param\n"); } int i = 0, j = 0; int temp = 0; for (i = 0; i < length; i++) { for (j = i + 1; j < length; j++) { if (numbers[i] > numbers[j]) { temp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = temp; } } } return ret; } int IsContinous(int *numbers, int length) { /* * 先将数组进行排序,然后记录数组中0的个数 * 记录数组中的差距和,比较0的个数和数组差距 * */ int ret = 0; if (numbers == NULL || length <1) { ret = -1; return -1; } int IsZero = 0; int GapLen = 0; int i = 0; for (i = 0; i < length; i ++) { if (numbers[i] == 0) { IsZero ++; } } InsertSort(numbers, length); int pBegin = IsZero; int pEnd = IsZero + 1; while (pEnd < length) { if (numbers[pBegin] == numbers[pEnd]) ret = 1; GapLen = numbers[pEnd] - numbers[pBegin] - 1; pBegin = pEnd; pEnd ++; } if (GapLen > IsZero) ret = 1; return ret; }
/************************************************************************* > File Name: continusCards.h > Author: cyf > Mail: XXX@qq.com > Created Time: 2016年04月06日 星期三 14时48分52秒 ************************************************************************/ #ifndef CONTINUSCARDS_H #define CONTINUSCARDS_H #include <stdio.h> #include <stdlib.h> #include <string.h> int IsContinous(int *numbers, int length); #endif
/************************************************************************* > File Name: main.c > Author: cyf > Mail: XXX@qq.com > Created Time: 2016年04月06日 星期三 15时19分36秒 ************************************************************************/ #include "continusCards.h" int Test(char *testName, int *numbers, int length, int expected) { int ret = 0; if (testName == NULL || numbers == NULL ||length <1) { ret = -1; printf("func Test() err:param\n"); } int result = 0; result = IsContinous(numbers, length); if (result == expected) printf("Test:%s is success!\n", testName); else printf("Test:%s is success!\n", testName); return ret; } int main() { int rv = 0; int testNumbers[5] = {9, 0, 5, 8, 7}; int testNumbers1[5] = {0, 1, 5, 1, 3}; int testNumbers2[5] = {0, 0, 5, 1, 3}; rv = Test("test1", testNumbers, 5, 0); if (rv == -1) { printf("func Test() err\n"); } rv = Test("test2", testNumbers1, 5, 1); if (rv == -1) { printf("func Test() err\n"); } rv = Test("test3", testNumbers2, 5, 0); if (rv == -1) { printf("func Test() err\n"); } return 0; }
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
相关文章推荐
- AngularJs 使用 $timeout
- TP临时关闭联表的方法
- android studio下的NDK开发详解(一)
- 大端和小端--内存对齐问题
- iOS绘图 - 自定义柱状图绘制
- 设计模式-代理模式(Proxy) java示例
- 前端构建工具gulpjs的使用介绍及技巧
- Cppslqite的使用
- CPU资源
- python3学习笔记2--命令提示符运行.py 的脚本
- 五子棋的简单实现方式
- [Android]java.lang.OutOfMemoryError
- 设置QLineEdit无边框且透明
- Python3:抓取百度关键词所包含的网页
- 条件注释判断浏览器版本<!--[if lt IE 9]>
- java重载的意义
- spring 常用工具包
- cassandra 记录
- iOS8中的动态文本
- Java__Ajax与Json