您的位置:首页 > 其它

笔试题:爱情数字

2016-03-31 22:02 302 查看


这个怎么做?用暴力法解?所有可能排列,求最大值?

下面是用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,非常反直觉,库文档写的也不是很清楚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: