题目:从扑克牌中随机抽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)); }