题解 | #24点运算#

24点运算

https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

本题考点:
  • 回溯算法
特别注意:不要考虑运算优先级,不要考虑运算优先级,不要考虑运算优先级。

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

var value = map[string]int{
	"A":  1,
	"2":  2,
	"3":  3,
	"4":  4,
	"5":  5,
	"6":  6,
	"7":  7,
	"8":  8,
	"9":  9,
	"10": 10,
	"J":  11,
	"Q":  12,
	"K":  13,
}

var symbols = []string{"+", "-", "*", "/"}

// 最终解
var solution = ""

// 输出算式的运算顺序从左至右,不包含括号,如1+2+3*4的结果为24,2 A 9 A不能变为(2+1)*(9-1)=24
// 注意:没有优先级,没有优先级,没有优先级
func eval(exp []string) int {
	res := value[exp[0]]
	for i := 1; i < len(exp); i += 2 {
		switch exp[i] {
		case "+":
			res += value[exp[i+1]]
		case "-":
			res -= value[exp[i+1]]
		case "*":
			res *= value[exp[i+1]]
		case "/":
			res /= value[exp[i+1]]
		}
	}
	return res
}

func search(pokers []string, visited []bool, ans []string) {
	// 已有解,直接返回
	if len(solution) != 0 {
		return
	}

	// 检查最终解
	if len(ans) == 7 && eval(ans) == 24 {
		solution = strings.Join(ans, "")
		return
	}

	// 构造数字
	if len(ans)&1 == 0 {
		for i := 0; i < len(pokers); i++ {
			if visited[i] {
				continue
			}
			visited[i] = true
			ans = append(ans, pokers[i])
			search(pokers, visited, ans)
			ans = ans[:len(ans)-1]
			visited[i] = false
		}
	} else {
		// 构造符号
		for _, symbol := range symbols {
			ans = append(ans, symbol)
			search(pokers, visited, ans)
			ans = ans[:len(ans)-1]
		}
	}
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	input := strings.ToUpper(scanner.Text())

	// 检查大小王
	if strings.Contains(input, "JOKER") {
		fmt.Println("ERROR")
		return
	}

	ans := []string{}
	solution = ""
	visited := make([]bool, 4)
	search(strings.Split(input, " "), visited, ans)
	if len(solution) == 0 {
		solution = "NONE"
	}
	fmt.Println(solution)
}

全部评论

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务