starbhhc 发表于 2013-2-4 19:56:10

有n张扑克牌,每张牌的取值范围是:2,3,4,5,6,7,8,9,

import java.util.Arrays;


/**
* (c)2010 华润(集团)有限公司版权所有. 保留所有权利.
*
* 文件名称:Ha.java
* 程序说明:
* 创建日期:Jun 18, 2010
* @version 1.0
*/

/**
* @类名:Ha
* @描述:TODO
* @创建日期:Jun 18, 2010 4:43:36 PM
* @修改记录:
*
* @author WangYanFeng
*/

public class Ha {

    /*
   * 有n张扑克牌,每张牌的取值范围是:2,3,4,5,6,7,8,9,
   * 10,J,Q,K,A。在这n张牌中找出顺子(5张及5张以上的连续
   * 的牌),并将这些顺子打印出来。
   */

//    public static void main(String[] args) {
//   // TODO Auto-generated method stub
//   String str = "2,3,4,5,6,7,8,9,10,J,Q,K,A";
//   wantA(str,5);
//   }
//      
//   /**
//   *
//   * @param str
//   * @param limit 最少几个连续
//   */
//   public static void wantA(String str,int limit){
//   String[] array = str.split(",");
//   for(int i = 0;i<array.length - limit;i++){
//   for(int j = i+limit;j<array.length - 1;j++){
//   for(int k = i;k<j;k++){
//   System.out.print(array);
//   }
//   System.out.println();
//   }
//   }
//   }
//    }
   
//    public static void main(String[] args) {
//      String str = "2,3,4,5,6,7,8,9,10,J,Q,K,A";
//      wantA(str,5);
//      }
//      
//      public static void wantA(String str,int limit){
//      String[] array = str.split(",");
//      for(int k = 0; k < array.length - limit + 1; k ++){
//            for(int j = limit + k ; j < array.length + 1;j ++){
//                for(int i = k; i < j; i ++){
//                  System.out.print(array);
//                }
//                System.out.println();
//            }
//      }
//      }

    public static void main(String[] args) {
      char[] cs = { 'Z', 'C', 'D', 'E', '1', '2', '3', '4', '8', '5', '6',
                'A', '7', 'B' };
      Arrays.sort(cs);
      System.out.println(Arrays.toString(cs));
      // 连续的字符长度默认设置为5
      int length = 5;
      while (length < cs.length) {
            for (int i = 0; i < cs.length - length; i++) {
                char[] temp = getIncreaseChars(new String(cs).substring(i,
                        i + length).toCharArray(), length);
                if (temp != null)
                  System.out.println(Arrays.toString(temp));
            }
            length++;
      }
    }

    // 专门比较连续的n个字符或数字
    public static char[] getIncreaseChars(char[] cs, int n) {
      if (cs.length != n)
            throw new RuntimeException("char array's length must be " + n);
      char[] csCopy = cs.clone();
      Arrays.sort(csCopy);
      for (int i = 0; i < n - 1; i++) {
            if (csCopy != csCopy + 1)
                return null;
      }
      return csCopy;
    }

}
页: [1]
查看完整版本: 有n张扑克牌,每张牌的取值范围是:2,3,4,5,6,7,8,9,