笔试题:爱情数字

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

下面是用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,非常反直觉,库文档写的也不是很清楚

原文地址:https://www.cnblogs.com/simplelovecs/p/5343020.html