[抽象建模问题]扑克牌的顺子判断
根据抽到的5张扑克牌,判断是不是顺子。注意:大小王可以随便的代替任何的牌。
bool IsContinuous( vector<int> numbers ) { int i = 0; int length = numbers.size(); if(length <= 0) { return false; } int *arr = &numbers[0]; qsort(arr, length, sizeof(int), compare); //统计0的个数 int numberOfZero = 0; for(i = 0; i < length && numbers[i] == 0; ++i) { ++numberOfZero; } //统计空缺的个数 int numberOfGap = 0; int start = numberOfZero; int end = start + 1; while(end < length) { if(numbers[end] == numbers[start]) return false; else { numberOfGap += numbers[end] - numbers[start] - 1; start++; end++; } }//while return numberOfGap > numberOfZero ? false : true; } static int compare(const void *arg1, const void *arg2) { return *(int*)arg1 - *(int*)arg2; }
注意一下注意点:
1. 大小王先用0表示,这样方便处理。
2. qsort的用法:
功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 int compare(const void *elem1, const void *elem2 );
3. 再来看一个sort的排序方法:
sort函数也有一个compare方法:
bool compare(int a,int b) { return a<b; //升序排列,如果改为return a>b,则为降序 } 意思就是: 如果return true;那么就按参数的顺序排列; 如果return false;那么就按参数的顺序的逆序排列;