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

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;


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

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

public class Chains {

    /**
     * Range
     */
    public static Map<Integer, String> map = new HashMap<Integer, String>();
    /**
     * Chain
     */
    public List<List<Integer>> chains = new ArrayList<List<Integer>>();

    static {
        map.put(2, "2");
        map.put(3, "3");
        map.put(4, "4");
        map.put(5, "5");
        map.put(6, "6");
        map.put(7, "7");
        map.put(8, "8");
        map.put(9, "9");
        map.put(10, "10");
        map.put(11, "J");
        map.put(12, "Q");
        map.put(13, "K");
        map.put(14, "A");
    }

    /**
     * 搜索所有的绳子
     * @param cards
     * @return List<Chain>
     */
    public List<List<Integer>> findChains(List<Integer> cards) {
        // 去掉重复
        List<Integer> sortlist = new ArrayList<Integer>(new HashSet<Integer>(
                cards));
        // 排序
        Collections.sort(sortlist);
        for (int i = 0; i < sortlist.size() - 4; i++) {
            // 设置开始标记
            int step = sortlist.get(i);
            List<Integer> temp = new ArrayList<Integer>();
            temp.add(step);
            int count = 1;
            for (int j = i + 1; j < sortlist.size(); j++) {
                if (sortlist.get(j).equals(step + 1)) {
                    step++;
                    count++;
                    temp.add(step);
                    if (count >= 5) {
                        // 不能直接add(temp)因为List是可变对象
                        chains.add(new ArrayList<Integer>(temp));
                    }
                } else {
                    break;
                }
            }
        }

        return chains;
    }

    /**
     * 构造一副牌
     * @param n
     * @return List<Integer>
     */
    public static List<Integer> cards(Integer n) {
        List<Integer> cards = new ArrayList<Integer>();
        if (n < 5) {
            n = 5;
        }
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            cards.add(r.nextInt(13) + 2);
        }
        return cards;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Chains c = new Chains();

        // List<Integer> cards = new ArrayList<Integer>();
        // cards.add(5);
        // cards.add(6);
        // cards.add(6);
        // cards.add(7);
        // cards.add(8);
        // cards.add(9);
        // cards.add(9);
        // cards.add(10);
        // cards.add(11);
        // cards.add(13);
        // cards.add(14);
      
        //自动构造一副牌
        List<Integer> cards = new ArrayList<Integer>();
        cards = Chains.cards(20);
       
        for (List<Integer> chain : c.findChains(cards)) {
            StringBuffer sb = new StringBuffer();
            for (Integer i : chain) {
                sb.append(map.get(i));
            }
            System.out.println(sb.toString());
        }

    }

}

你可能感兴趣的:(java,C++,c,C#,J#)