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

April · · 2952 次点击
April
http://books.studygolang.com/gopl-zh/index.html
非常感谢您的回复! 这个思路非常棒! 有两点不明白,请教您一下: 1.x+2 相当于 y+1 是如何得来的? 2.x+y 最小,是如何得来的? 想到以上这些的思路是什么? 觉得我自己在知识上有所欠缺,想不明白 期待回复,谢谢!
#7
更多评论
```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