zoukankan      html  css  js  c++  java
  • [抽象建模问题]扑克牌的顺子判断

    根据抽到的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;那么就按参数的顺序的逆序排列;
    
  • 相关阅读:
    B1295 [SCOI2009]最长距离 最短路
    B1588 [HNOI2002]营业额统计 set||平衡树
    B1202 [HNOI2005]狡猾的商人 并查集
    B1303 [CQOI2009] 中位数图 数学
    B2002 [Hnoi2010]Bounce 弹飞绵羊 分块
    B1192 [HNOI2006]超级英雄Hero 二分图匹配
    逐个击破
    HAOI2009 毛毛虫
    HNOI/AHOI2018 道路
    NOI2005 瑰丽华尔兹
  • 原文地址:https://www.cnblogs.com/stemon/p/4812238.html
Copyright © 2011-2022 走看看