求助|请教一个整理扑克牌的算法,可能略类似动态规划
2459
2021.12.08
2021.12.09
发布于 未知归属地

起源是想要复制一个名为《海贼扑克牌》的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。

请问,难道只能将所有的整拍可能全列出来,取其中散点最小的整法吗?

还是有更好的方式?

评论 (3)