笔试题:爱情数字

这个怎么做?用暴力法解?所有可能排列,求最大值?
下面是用Go语言实现的代码,组合遍历求解,不知道对不对
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
var tmplist []int
func main() {
for {
// v, val := fmtRead()
v, val := bufioRead()
result := loveMagicNumber(v, val, 8)
fmt.Println("可油漆最大数字为:", result)
fmt.Println()
}
}
func bufioRead() (int, []int) {
var v int
var val = []int{}
r := bufio.NewReader(os.Stdin)
for {
fmt.Println("请输入油漆容量:(整数)")
strBytes, _, err := r.ReadLine()
str := strings.TrimSpace(string(strBytes))
v, err = strconv.Atoi(string(str))
if err == nil {
break
} else {
fmt.Println(err)
}
}
for {
fmt.Println("请输入1-9,九个数字各自需要的油漆:(整数)")
strBytes, _, err := r.ReadLine()
str := strings.TrimSpace(string(strBytes))
_ = err
strs := strings.Split(str, " ")
for i := 0; i < len(strs); i++ {
if strs[i] == "" {
continue
}
vt, _ := strconv.Atoi(strs[i])
val = append(val, vt)
}
break
}
fmt.Println("油漆容量:1-9数字耗费油漆量", v, ":", val)
return v, val
}
func loveMagicNumber(v int, val []int, index int) int {
if index < 0 {
return valueof(tmplist)
}
r1 := loveMagicNumber(v, val, index-1)
r2 := r1
if v-val[index] >= 0 {
tmplist = append(tmplist, index+1)
r2 = loveMagicNumber(v-val[index], val, index-1)
tmplist = tmplist[0 : len(tmplist)-1]
}
return max(r1, r2)
}
func valueof(valist []int) int {
value := 0
for _, i := range valist {
value = value*10 + i
}
return value
}
func max(a int, b int) int {
if a > b {
return a
}
return b
}
顺便吐槽下Go语言,Go语言的库不好用,不管什么标准输入获取、字符串操作Split,Atoi,非常反直觉,库文档写的也不是很清楚
----------------------
笨笨,简单爱...努力,加油!~~~
----------------------
浙公网安备 33010602011771号