扑克牌中的顺子(网易2014.3.16笔试offerP226)

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J~K为11,12,13,而大小王可以看成任意数字。(网易要求必须用C完成,可以用C库函数)

java代码:

//扑克牌中的顺子。通过测试
//随机5张牌,大小王代表任意数
import java.util.*;
public class PlayingCards{
    public static void main(String[] args){
        int data[]={5,7,8,9,0};    
        System.out.println(playingCards(data));
    }
    public static boolean playingCards(int data[]){
        if(data==null||data.length<1){
            return false;
        }
        int gap = 0;
        int kings = 0 ;
        Arrays.sort(data);
        for(int i=0; i<data.length&&data[i]==0; i++){
            kings++;
        }
        int j=kings;
        while(j<data.length-1){
            if(data[j]==data[j+1]){
                return false;
            }
            gap+=data[j+1]-data[j]-1;//!!! +=
            j++;
        }
        return (kings>=gap)?true:false;
    }
}

    

c代码:

#include <iostream>
#include <stdio.h>
using namespace std;
//自己写的代码,大小王看成是0
int compare(const void *arg1, const void *arg2)
{
    return *(int*)arg1-*(int*)arg2;
}
void isContinuous(int *array,int size) { if(array==NULL||size<1) { cout<<"wrong input!"<<endl; return; } qsort(array,size,sizeof(int),compare);//C的库函数,排序,时间复杂度O(nlogn) int gap=0; int king=0; for(int i=0;i<size;i++) { if(array[i]==0){ king++; } else if(i<size-1) { if(array[i]==array[i+1])//有相同点数的时候,不可能是顺子 { cout<<"not continuous!"<<endl; return; } else { gap+=(array[i+1]-array[i]-1); } } }//for if(gap>king) { cout<<"not continuous!"<<endl; return; } else { cout<<"is continuous!"<<endl; return; } }
int main(){ int array[]={0,4,1,0,5}; isContinuous(array,sizeof(array)/sizeof(int)); }
原文地址:https://www.cnblogs.com/seven7seven/p/3668951.html