扑克牌中的顺子(网易2014.3.16笔试offerP226)
2014-04-16 17:45
183 查看
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J~K为11,12,13,而大小王可以看成任意数字。(网易要求必须用C完成,可以用C库函数)
java代码:
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)); }
相关文章推荐
- 剑指offer_扑克牌顺子
- 剑指offer:扑克牌的顺子(java)
- 剑指Offer——网易笔试题+知识点总结
- 剑指offer 面试题44—扑克牌的顺子
- 约瑟夫环(CVTE、网易2014.3.16笔试题offerP228)
- 【剑指offer】:Q44:扑克牌的顺子
- 剑指Offer——网易笔试题+知识点总结
- 网易游戏 从笔试到offer 经验分享
- [剑指offer][面试题44]扑克牌的顺子(待完善)
- 剑指offer—扑克牌顺子
- 剑指Offer—45—扑克牌顺子
- 剑指offer44-扑克牌顺子判断
- 剑指offer 扑克牌顺子
- 剑指offer-面试题44-扑克牌的顺子
- 剑指Offer面试题44:扑克牌的顺子 Java实现
- 网易游戏 从笔试到offer 经验分享——寻找最适合自己的公司和岗位
- 剑指offer 把字符串转换成整数 扑克牌顺子
- 剑指Offer——网易笔试之解救小易
- 剑指offer 44-扑克牌的顺子
- 剑指offer--面试题44:扑克牌的顺子--用哈希表