求 x * 99 + y * 199 最接近 1159 的 x、y 的组合

April · 2017-07-22 02:46:32 · 3200 次点击
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
April
http://books.studygolang.com/gopl-zh/index.html

谢谢指出! 实际的需求是这样的,准备注销小招行的信用卡,但是信用卡中还有1159积分,刚好看到可以捐给 贫困/疾病/缺书 的孩子,为了获得最优比,就想这个用很少有机会使用的 go语言 来算一下,怎样才能充分利用这个积分,尽量少一点儿捐给银行!

所以,必须保证 最优比 的值,小于等于 1159

再次感谢您的回复和代码! 已认真阅读您的代码!谢谢!

#3