// 剑指offer_扑克牌顺子.cpp : 定义控制台应用程序的入口点。
// 题目描述:输入五个数字,0可以代表任何数,问这五个数字是否是一个顺子
// 思路: 排序后计算非0的相邻两个数之间的距离(gap),然后与0(大小王)的数量进行比较,看是否小于这个count
#include "stdafx.h"
#include"vector"
using namespace std;
void swap(int& x, int& y) {
x = x + y;
y = x - y;
x = x - y;
}
bool IsContinuous(vector<int> numbers) {
int N = numbers.size();
if (N == 0)
return false;
int i, j;
for (i = 0; i<N; i++)
for (j = i + 1; j<N; j++)
if (numbers[i]>numbers[j])
swap(numbers[i], numbers[j]);
int count = 0;
int gap = 0;
for (i = 0; i<N; i++) {
if (numbers[i] == 0)
count++;
else {
if (i<N - 1) {
int z = numbers[i + 1] - numbers[i];
if (z == 0)
gap = 99;
else
gap += z - 1;
}
}
}
if (count >= gap) return true;
return false;
}
int main()
{
vector<int> v = { 1,3,4,2,5 };
printf("%d\n", IsContinuous(v));
return 0;
}