在斗地主扑克牌游戏中,扑克牌由小到大的顺序为3 4 5 6 7 8 9 10 J Q K A 2
玩家可以出的扑克牌阵型有,单张,对子,顺子,飞机,炸弹等
其中顺子的出牌规则为,由至少5张由小到大连续递增的扑克牌组成
且不能包含2
例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,10,J,Q,K,A}都是有效的顺子
而{J,Q,K,A,2}、{2,3,4,5,6}、{3,4,5,6}、{3,4,5,6,8}等都不是顺子
给定一个包含13张牌的数组,如果有满足出牌规则的顺子,请输出顺子
如果存在多个顺子,请每行输出一个顺子
且需要按照顺子的第一张牌的大小(必须从小到大)依次输出
如果没有满足出牌规则的顺子,请输出No
输入描述
13张任意顺序的扑克牌,每张扑克牌数字用空格隔开,
每张扑克牌的数字都是合法的
并且不包括大小王:2 9 J 2 3 4 K A 7 9 A 5 6
不需要考虑输入为异常字符的情况
输出描述
组成的顺子 每张扑克牌数字用空格隔开
3 4 5 6 7
示例一
输入
2 9 J 2 3 4 K A 7 9 A 5 6
输出
3 4 5 6 7
说明
13张牌中可以组成的顺子只有一组:3 4 5 6 7
示例二
输入
2 9 J 10 3 4 K A 7 Q A 5 6
输出
3 4 5 6 7
9 10 J Q K A
说明
13张牌中可以组成两组顺子,从小到大分别为:
3 4 5 6 7
9 10 J Q K A
示例三
输入
2 9 9 9 3 4 K A 10 Q A 5 6
输出
No
说明
13张牌中无法组成顺子
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
"strings"
)
func main() {
reader := bufio.NewScanner(os.Stdin)
reader.Scan()
temp := strings.Fields(reader.Text())
arr := make([]int,0)
for i := 0; i < len(temp); i++ {
if temp[i] == "J" {
arr = append(arr,11)
} else if temp[i] == "Q" {
arr = append(arr,12)
} else if temp[i] == "K" {
arr = append(arr,13)
} else if temp[i] == "A" {
arr = append(arr,14)
} else {
num, err := strconv.Atoi(temp[i])
if err != nil {
fmt.Println(err)
}
if num == 2 {
continue
}
arr = append(arr,num)
}
}
straight := make([][]int,0)
sort.Ints(arr)
used := make([]bool,len(arr))
for i :=0; i <= len(arr)-5; i++ {
if used[i] {
continue
}
var count = 1
var last = i
s := []int{arr[i]}
pos := []int{i}
for j:= i+1; j < len(arr); j++ {
if arr[j] == arr[last] || used[j] {
continue
}
if arr[j]-arr[last] == 1 {
s = append(s,arr[j])
pos = append(pos,j)
last=j
count++
} else {
break
}
}
if count >= 5{
straight = append(straight,s)
for _, v := range pos{
used[v] = true
}
}
}
if len(straight) > 0 {
for i :=0; i < len(straight); i++ {
for j := 0; j < len(straight[i]); j++ {
if j == len(straight[i])-1 {
if straight[i][j] == 11 {
fmt.Printf("J\n")
} else if straight[i][j] == 12 {
fmt.Printf("Q\n")
} else if straight[i][j] == 13 {
fmt.Printf("K\n")
} else if straight[i][j] == 14 {
fmt.Printf("A\n")
} else {
fmt.Printf("%d\n",straight[i][j])
}
} else {
if straight[i][j] == 11 {
fmt.Printf("J ")
} else if straight[i][j] == 12 {
fmt.Printf("Q ")
} else if straight[i][j] == 13 {
fmt.Printf("K ")
} else if straight[i][j] == 14 {
fmt.Printf("A ")
} else {
fmt.Printf("%d ",straight[i][j])
}
}
}
}
} else {
fmt.Println("No")
}
}