起源是想要复制一个名为《海贼扑克牌》的flash小游戏。
结果自动整牌把我难住了。
问题大致如下
有扑克牌堆(不包括大小王):
game.initCards = function () {
for (var i = 0; i < 52; i++) {
var card=[Math.floor(i / 13), i % 13, i];
this.cards.push(card);
}
this.cards = this.shuffle(this.cards);
}从上述抽取n(n>3)张牌,记作数组cards,
将card[1]称为点数。
相同点数或者同花顺不少于3张可以成组,
整理手牌使散牌(未成组手牌)点数相加最小,
返回整好的手牌。
我本来写的是
从中依次拿一张,看是否有能与它组成同花顺的牌,如果有,将其点数相加。
将这些组成通话顺的牌依次检测是否有相同点数的牌,如果有,计算其点数相加,并与同花顺点数比较。
按照点数大的组合方式,将牌取出。
将剩下的牌继续执行上述步骤。
结果刚刚发现仍然有如下问题:假设有7张牌,同花顺2345和同点数444,可以整理成0散点。
但因为4张4的点数大于2345的点数,会整理成4张4和散排235。
请问,难道只能将所有的整拍可能全列出来,取其中散点最小的整法吗?
还是有更好的方式?