求助 关于VC++ 数组排序算法
请问各位高手
如果我有个数组比如
int Num[10]={1,1,1,2,2,3,4,4,5,5}
或者里面是{1,4,5,9,4,6,3,2,4,7}
通过排序 要求它得出来得结果像麻将那样
3个数是连续或则一样的.
不知道各位高手有没有好点的算法 我用了很多方法 都不成功
谢谢
[解决办法]
楼主是想达到什么目的?判断听牌?还是胡牌?判断全部组合的话太累了,也没有必要^_^
[解决办法]
无论如何,先排序(用multiset),或者hash(用hash_multiset),或者用计数器(一个数组即可,出现一次K值,就记录在下标为K的元素中,也可用一个map存储记数器元素)。使用哪一种将影响具体地代码,但不影响思路。
然后,用制定的模式一次一次的尝试。如三条(恕我不会麻将术语,以纸牌代替)、以k起始的三连张等等……如果相互间有优先级,则按顺序来,每成功一次,计数器(假设是用计数器)做相应减法,再进入下一次测试;如果是平等选择,则分别测试,计数器先不变化,等结果出来,选择一种最佳的,再据此改变技术器,进入下一轮。如果是更复杂的组合最佳选择,也还是用计数器 "测试-选择-实行-下一轮 "的方式,只是每一步内容更多罢了。
这样,此问题就转化为“不同选择方式”的编码,而这已经和排序无关了。