计算整扑或整扑一将需要的宝数量时,部分牌型存在问题
Closed this issue · 4 comments
xlongqq commented
牌型为 101,101,102,103,104,105,106,107 或者 101,101,102,103,104,104,105,106时,对子会被拆分
TomorrowWu commented
这个主要是考虑到整体思路上,形成顺子比形成对子所需要的赖子多
TomorrowWu commented
所以,整体思路就是,优先形成顺子,拆对子形成顺子
TomorrowWu commented
这个我觉得可以
这样的思路,先去除纯顺子(不需要拆分对子就能形成的顺子),比如当筛选出101,102,103的时候,判断前一张是不是等于101,如果等于,就先不去除101,102,103,先过滤掉纯顺子
原始邮件
发件人:xlongqqnotifications@github.com
收件人:TomorrowWu/dataStructures-algorithm-demodataStructures-algorithm-demo@noreply.github.com
抄送:TomorrowWuwuming497735138@gmail.com; Mentionmention@noreply.github.com
发送时间:2017年12月20日(周三) 10:34
主题:Re: [TomorrowWu/dataStructures-algorithm-demo] 计算整扑或整扑一将需要的宝数量时,部分牌型存在问题 (#1)
嗯嗯,不过顺子形成后,如果剩余散子数为2的话,感觉要有一个校验,拆掉对子后形成的散子如果可以通过替换顺子中的某个牌来得到对子的话,那就替换掉,得到对子;因为对子只需要一个宝牌就可以成为三同,而散牌想形成顺子就比较麻烦了。 我举的例子中,牌型为 101,101,102,103,104,105,106,107 如果没有后面的校验,得到的顺子是 101,102,103 104,105,106 ,散牌为101,107 ,可以通过替换,得到顺子 102,103,104 105,106,107 ,散牌为 101,101。 因为有排序,所以只需要考虑低位散子可以组成对子就好了,高位的对子不会被拆分的。 @TomorrowWu
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
TomorrowWu commented
你用钉钉么,可以加我钉钉,直接交流,这样发代码也方便阅读,平时上班,钉钉用的多,微信看的少
原始邮件
发件人:xlongqqnotifications@github.com
收件人:TomorrowWu/dataStructures-algorithm-demodataStructures-algorithm-demo@noreply.github.com
抄送:TomorrowWuwuming497735138@gmail.com; Mentionmention@noreply.github.com
发送时间:2017年12月20日(周三) 11:47
主题:Re: [TomorrowWu/dataStructures-algorithm-demo] 计算整扑或整扑一将需要的宝数量时,部分牌型存在问题 (#1)
谢谢大神回复。
按照你的思路来解,只要修改分离顺子的方法就好了,简单多了 ^^
以下是修改的方法,欢迎指正
`func separate3Lian(arr []int16) ([]int16, [][]int16) {
shunZi := [][]int16{}
is := false
for i, _ := range arr {
//前3张无对子的情况下(101,102,103)
if i = len(arr)-3 {
if arr[i+1] == arr[i]+1 arr[i+2] == arr[i]+2 {
//如果顺子第一张与前一张可组成对子,则不拆分,除非前一张和再前一张可以组成2连
if i==0 || arr[i]!=arr[i-1] || (i1 arr[i-1] == arr[i-2]+2){
shunZi = append(shunZi, []int16{arr[i], arr[i+1], arr[i+2]})
arr[i] = 0
arr[i+1] = 0
arr[i+2] = 0
is = true
break
}
}
}
//前3张有对子的情况下(101,102,102,103)
if i = len(arr)-4 {
if arr[i+1] == arr[i]+1 arr[i+3] == arr[i]+2 {
shunZi = append(shunZi, []int16{arr[i], arr[i+1], arr[i+3]})
arr[i] = 0
arr[i+1] = 0
arr[i+3] = 0
//log.Println("去除顺子:%v", arr)
is = true
break
}
}
}
if is {
//如果祛除过顺子,那么需要清洗0之后继续祛除
r := []int16{}
for _, v := range arr {
if v != 0 {
r = append(r, v)
}
}
a, s := separate3Lian(r) shunZi = append(shunZi, s...) return a, shunZi } else { return arr, shunZi }
}`
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.