您的位置:首页 > Web前端

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

2014-04-16 17:45 183 查看
题目:从扑克牌中随机抽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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: