求更好的实现方法,谢谢!
我这个写法实在是太烂了,求指点!谢谢!
###[点我直接改代码](https://wide.b3log.org/playground/5626f9847c10894f7cc15a3fccb5e186.go)
```
package main
import (
"fmt"
"sort"
)
func main() {
sum := 1159
res := make(map[int][]int)
var fin []int
for i := 0; i < 12; i++ {
for j := 0; j < 6; j++ {
tmp := sum - 99*i - 199*j
if tmp > 0 && tmp < 100 {
res[tmp] = []int{i, j}
fin = append(fin, tmp)
}
}
}
sort.Ints(fin)
fmt.Println(fin[0])
fmt.Println(res[fin[0]])
}
```
谢谢指出!
实际的需求是这样的,准备注销小招行的信用卡,但是信用卡中还有1159积分,刚好看到可以捐给 贫困/疾病/缺书 的孩子,为了获得最优比,就想这个用很少有机会使用的 go语言 来算一下,怎样才能充分利用这个积分,尽量少一点儿捐给银行!
所以,必须保证 最优比 的值,小于等于 1159
再次感谢您的回复和代码!
已认真阅读您的代码!谢谢!
#3
更多评论
```go
package main
import (
"fmt"
"math"
)
func main() {
sum := 1159
a, b := 99, 199
x, y := find(a, b, sum)
result := a*x + b*y
fmt.Println("x=", x, ", y=", y, ", 最接近的值为:", result, " 差值为:", math.Abs(float64(result-sum)))
}
func find(a, b, result int) (x, y int) {
xx, yy := 0, 0
for x := 0; ; x++ {
for y := 0; ; y++ {
if math.Abs(float64(a*x+b*y-result)) <= math.Abs(float64(a*xx+b*yy-result)) {
xx = x
yy = y
} else {
return xx, yy
}
}
}
}
```
#1
另外,你这个算法有问题,1和5的值为 99+5*199=1094,相差65,我这个算出的是: x= 0 , y= 6 , 最接近的值为: 1194 差值为: 35
#2