日期:2014-05-20  浏览次数:20782 次

一个面试题(关于N张扑克牌能不能连成顺子)
有N张扑克牌(A,2,3,4,5,6,7,8,9,10,J,Q,K),写个程序判断这N张牌里能不能有顺子(顺子是>=5张的连续牌).能就返回组成的顺子(有多少返回多少),不能就返回NULL.

------解决方案--------------------
0 0000 0000 0000

用13位表示整个牌序列,数组里面有这张牌,就将相应的位置1,也就是上面的位或操作

最终表示位一个1、0序列,判断就变成是否有连续5个1存在,就用移位(11111)2进行位与运算
------解决方案--------------------
其他代码不变,你把printResult函数替换为下面新的实现就可以了

private static void printResult(ArrayList <String> result) {
int count = 0;
String[] nodes = null;
if(result.size() == 0) {
System.out.println( "没有顺子!! ");
}else {
for(String s:result) {
nodes = s.split( ", ");
count += (1+(nodes.length-4))*(nodes.length-4)/2;
}
System.out.println( "共有 "+count+ "个顺子: ");
for(String s:result) {
nodes = s.split( ", ");
for(int i=5; i <=nodes.length; i++)
for(int j=0; i-j> 4; j++) {
System.out.print(nodes[j].trim());
for(int x = j+1; x <i; x++) {
System.out.print( ", " + nodes[x]);
}
System.out.println();
}
}
}
}