zoukankan      html  css  js  c++  java
  • 判断顺子的方法

            /// <summary>
            /// 检查顺子
            /// </summary>
            /// <param name="cards">排序后的原始牌</param>
            /// <param name="kingCount">癞子数量</param>
            /// <param name="handCards">比较牌</param>
            /// <returns></returns>
            public static bool CheckStraight(List<int> cards, int kingCount, out List<int> handCards)
            {
                handCards = new List<int>();
                var cards2 = cards.Take(cards.Count - kingCount).ToList();
                for (int i = 0; i < cards2.Count; i++)
                {
                    var pre = cards2[i];
                    handCards.Add(pre);
                    if (i == cards2.Count - 1)
                    {
                        break;
                    }
                    var cur = cards2[i + 1];
                    var interval = (cur%100) - (pre%100);
                    if (interval == 1)
                    {
                        continue;
                    }
                    else if(interval>1&&kingCount > 0)
                    {
                        pre = pre % 100;
                        while (interval > 1)
                        {
                            if (kingCount<=0)
                            {
                                return false;
                            }
                            kingCount--;
                            pre++;
                            handCards.Add(pre);
                            interval--;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
                if (kingCount>0)
                {
                    var first = handCards.First();
                    var last=handCards.Last();
                    while (14-(last%100)>0&&kingCount>0)//先从后面补
                    {
                        var newlast = (last % 100) + 1;
                        handCards.Add(newlast);
                        kingCount--;
                        last = newlast;
                    }
                    if (kingCount > 0)//最后从前面补
                    {
                        while ((first%100)-2>0&&kingCount>0)
                        {
                            var newfirst = (first % 100) - 1;
                            handCards.Insert(0, newfirst);
                            kingCount--;
                            first = newfirst;
                        }
                    }
                }
                handCards.Reverse();
                return true;
            }

    例如:110,212,113,癞子,癞子

    110%100 表示10

    110/100   表示花色,方块

  • 相关阅读:
    uni_app 跳转到外部html5 的页面 (web-view) 的一些使用
    vue初学备份(动态切换class类)
    MySQL数据库基本操作
    蛋疼的JavaScript(二)this
    Java中的String,StringBuffer和StringBuilder
    LintCode_1 单例模式
    [转载]C语言EOF是什么?
    Python中的枚举
    对BOM的总结
    python类相关总结(持续更新)
  • 原文地址:https://www.cnblogs.com/kingge/p/10845897.html
Copyright © 2011-2022 走看看