给出一组数 {A,2,3,4,5,6,7,8,9,10,J,Q,K}写算法找出顺子 ;顺子就是这样:A,2,3,4,5; 大于5个都算 
请帮忙写下  谢谢了

解决方案 »

  1.   

    我有个想法....先按照非降序排列好,然后取最小的一个数A[0]入栈,若下一个数A[1]=A[0]+1,则    push A[1],若不等则清空stack,push A[2].......反复。排序完成后的复杂度不是很高貌似。。我新手,错了请放过我
      

  2.   

    接3楼,若stack里面数量大于等于5并且当前数大于前一个数+1,则取出stack内所有数存放,然后继续
      

  3.   

    {A,2,3,4,5,6,7,8,9,10,J,Q,K}
    如果J,Q,K,A,2 不是顺子那么就很好解决咯
    最大的5位顺子是9,10,J,Q,K;
    6位顺子是8,9,10,J,Q,K;
    7位顺子……
    8位……
    9位……
    10位……
    ……
    13位…… 就是{A,2,3,4,5,6,7,8,9,10,J,Q,K}我觉得稍微改下冒泡 就能实现了
      

  4.   

    lz.可不可以这样在这个数组中,把A替换成1,J,Q,K分别替换成11,12,13
    再对这个数组比较一下,看后一下是不是比前一个大一。如果是且长度大于等于5就输出来。 但是后面那个数还比前面的大1,就接着往下比。直到不成为止,这时把这个数组输出来。再把A替换成1,J,Q,K分别替换成11,12,13替换回去。
      

  5.   

    打错了。
    在这个数组中,把A替换成1,J,Q,K分别替换成11,12,13
    再对这个数组进行比较,看后一个是不是比前一个大1。如果是且长度大于等于5就输出来。 但是后面那个数还比前面的大1,就接着往下比。直到不成立为止,再把1,11,12,13替换回去。这时把这个数组输出来。
      

  6.   

    排序+2层循环...for(i=0;i<总个数;i++)
    {
       j=i;
       temp=array[j++];
       while(j<总个数)
       {
          if(temp+1!=array[j])
             break;
          else
          {
             temp+=1;
             if(j-4==i)
                break;
          }
          j++;
       }
       if(j-4==i)
       {
          for(k=i;k<j;k++)
             System.out.println(k);
       }
    }
    给LZ参考...
      

  7.   

    J,Q,K,A,2 这种不算
    可能是我没表述清楚吧。。所有大于5的都算  就像
    A,2,3,4,5
    A,2,3,4,5,6
    2,3,4,5,6  大于5个的都算 就类似于斗地主那样的连牌 
      

  8.   

    1、把给出的“牌号”放入一个数组里面
    2、用“堆”把数组中最小的元素先放入堆,找到以这个最小元素为头的最长顺子。
    3、如果这个顺子长度大于5,则可以设计一个读取的算法(读取的算法很简单,这里就不多说)。
    4、找到数组中除刚才用到的数据以外的数据中最小的元素,放入“堆”中。
    5、返回到2
    这样就能找到所有的顺子了!
    我QQ:623041460
    要了解,可加我QQ!
      

  9.   


       public static void main(String[] args)
        {
            String[] s = new String[]{"A", "2", "4", "5", "6", "8", "9", "10", "J", "Q", "K"};
            int[] arr = new int[s.length];        for (int i = 0; i < s.length; i++)
            {
                String s1 = s[i];
                if (s1 == "A") s[i] = "1";
                if (s1 == "J") s[i] = "11";
                if (s1 == "Q") s[i] = "12";
                if (s1 == "K") s[i] = "13";
                arr[i] = Integer.valueOf(s[i]);//s数组放到arr数组中。
            }
            Arrays.sort(arr);        int count = 0;//计数
            Set set = new HashSet();
            for (int i = 0; i < arr.length; i++)
            {
                boolean b = compareTo(arr[i], arr[i + 1]);
                if (b) {
                    set.add(arr[i]);
                    set.add(arr[i+1]);
                    count++;
                    if (count >= 5) {//当大于5才输出。
                        System.out.println(set);
                    }
                } else {
                    set.clear();
                    count = 0;
                }
            }
        }    private static boolean compareTo(int a, int b)
        {
            if (a + 1 == b){
                return true;
            } else {
                return false;
            }
        }A,J,Q,K没有换回来。自己换一下。
      

  10.   

    public class Test {
    public static void main(String[] args) { int[] a = { 65, 2, 3, 4, 5, 6, 7, 8, 9, 10, 74, 81, 75 }; for (int k = 5; k < a.length + 1; k++) { for (int j = k; j < a.length + 1; j++) {
    for (int i = k - 5; i < j; i++) {
    if (i == 0 || i == 10 || i == 11 || i == 12) { System.out.print(getChar(a[i]));
    } else {
    System.out.print(a[i]);
    } }
    System.out.println();
    }
    } } private static char getChar(int i) {
    char a = (char) i;
    return a; }}
      

  11.   

    A2345
    A23456
    A234567
    A2345678
    A23456789
    A2345678910
    A2345678910J
    A2345678910JQ
    A2345678910JQK
    23456
    234567
    2345678
    23456789
    2345678910
    2345678910J
    2345678910JQ
    2345678910JQK
    34567
    345678
    3456789
    345678910
    345678910J
    345678910JQ
    345678910JQK
    45678
    456789
    45678910
    45678910J
    45678910JQ
    45678910JQK
    56789
    5678910
    5678910J
    5678910JQ
    5678910JQK
    678910
    678910J
    678910JQ
    678910JQK
    78910J
    78910JQ
    78910JQK
    8910JQ
    8910JQK
    910JQK
      

  12.   

    java codepublic class Test {
    public static void main(String[] args) { int[] a = { 65, 2, 3, 4, 5, 6, 7, 8, 9, 10, 74, 81, 75 }; for (int k = 5; k < a.length + 1; k++) { for (int j = k; j < a.length + 1; j++) {
    for (int i = k - 5; i < j; i++) {
    if (i == 0 || i == 10 || i == 11 || i == 12) { System.out.print(getChar(a[i]));
    } else {
    System.out.print(a[i]);
    } }
    System.out.println();
    }
    } } private static char getChar(int i) {
    char a = (char) i;
    return a; }}/*
    运行结果
     * A2345
    A23456
    A234567
    A2345678
    A23456789
    A2345678910
    A2345678910J
    A2345678910JQ
    A2345678910JQK
    23456
    234567
    2345678
    23456789
    2345678910
    2345678910J
    2345678910JQ
    2345678910JQK
    34567
    345678
    3456789
    345678910
    345678910J
    345678910JQ
    345678910JQK
    45678
    456789
    45678910
    45678910J
    45678910JQ
    45678910JQK
    56789
    5678910
    5678910J
    5678910JQ
    5678910JQK
    678910
    678910J
    678910JQ
    678910JQK
    78910J
    78910JQ
    78910JQK
    8910JQ
    8910JQK
    910JQK
    */