剑指offer——面试题44:扑克牌的顺序
2015-09-07 19:10
417 查看
题目:
从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而
大,小王可以看成任意数字
思路:
先进行排序,接着判断大小王(0)的个数,接着
遍历剩下的,若是遇到后一个比前一个隔3以及3以上就不用考虑了
若是只隔1个,继续遍历
若是隔2个或3个,就看那个0的个数,填一个就减一。
从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而
大,小王可以看成任意数字
思路:
先进行排序,接着判断大小王(0)的个数,接着
遍历剩下的,若是遇到后一个比前一个隔3以及3以上就不用考虑了
若是只隔1个,继续遍历
若是隔2个或3个,就看那个0的个数,填一个就减一。
#include<iostream> #include<vector> using namespace std; bool ifconsistent(vector<int>& vec) { for(int k=0;k<vec.size()-1;k++)//进行排序 { for(int j=k;j<vec.size();j++) if(vec[k]>vec[j]) { int temp=vec[k]; vec[k]=vec[j]; vec[j]=temp; } } int num_wang=0;//计算王的个数 int i=0; if(vec[0]==0) { num_wang++; i++; if(vec[1]==0) {num_wang++;i++;} } int last=vec[i]; i++; while(i<5) { int times=vec[i]-last; if(times==0) return 0; if(times==1)//若是只相隔1的话直接往下走 { last=vec[i]; i++; } else if(times>3)//若是相隔超过了两个数字,那么就一一定不行 return 0; else //相隔一个或者两个数字时,要用王来替代。这个时候要确定下王的个数。 { if(num_wang<(times-1)) return 0; else { if(times==2) num_wang--; if(times==3) num_wang-=2; last=vec[i]; i++; } } } return 1; } int main() { int ary[5]={0,1,3,4,5}; vector<int> vec(ary,ary+5); cout<<ifconsistent(vec)<<endl; system("pause"); }
相关文章推荐
- 黑马程序员——集合框架(双列集合:Map接口)
- 【.Net码农】T4:T4 笔记 双模式
- 四年程序员归零心态
- 程序员眼中的女人
- [.Net码农]功能强大的T4文本模版
- [.Net码农]T4模版引擎之基础入门
- 码农 黑客和2B程序员之间的区别
- 黑马程序员---JAVA反射机制 二
- 黑马程序员--@synthesize的使用
- 软件测试面试题集锦
- 面试题 17
- 黑马程序员--@property的使用
- 黑马程序员-OC内存管理
- 一个合格的程序员应该读过哪些书
- 面试题 16
- struct字节对齐的问题,找工作笔试面试很喜欢考!!!!!
- 数据库和BI工程师面试题
- 黑马程序员--学习笔记--Java异常处理
- 野生程序员的故事
- 码农们可以优越,并且应该优越