无聊的程序猿
今天还是在家修船马达,想换新的Spark Plug试试能不能解决问题。问题接着就来了,火花塞需要将点火缝隙调到1毫米。看了看手里的gauge,没有1毫米,需要尽可能将量尺blade 组合成1毫米大小,越接近越好。看着那些数字和可能的组合,用手写,算了算,又在谷歌找了好一会,没找到什么方法。两片有误差,3片怎么样?4片组合说不定刚刚是1毫米?出问题啦!想了想,数字组合还有程序猿搞不掂的?就写了以下一段程序,最佳组合是0.102+0.889=0.991,误差0.009,还是两片搞定。我怎么没看见?
有了这段程序,我可以摆摊为大家算算什么时候出洞钓鱼啦,时间,温度,潮汐,不都是数字嘛!记得把钓点的GPS数字也报上为好。
object BladeCalculation {
def main(args: Array[String]): Unit = {
val target : Int = 1000
val bladeSizes = Array(51,76,102,152,203,254,305,330,381,406,432,457,508,559,635,660,711,762,813,889)
var gap : Int = 1000
var output = ""
for(windowSize <- 1 to 10) {
for(slide <- 0 to bladeSizes.length-windowSize-1) {
val selected = new Array[Int](windowSize)
for (i <- 0 to windowSize - 1) {
selected(i) = bladeSizes(slide + i)
}
println("selected numbers to compare-"+selected.mkString(","))
for (j <- 0 to bladeSizes.length - 1) {
if (!selected.contains(bladeSizes(j))) {
val total = selected.sum + bladeSizes(j)
if (Math.abs(total - target) < gap) {
gap = Math.abs(total - target)
output = selected.mkString(",")+","+bladeSizes(j)
}
}
}
}
}
println("best blade combination choice is ->"+output)
}
}
有了这段程序,我可以摆摊为大家算算什么时候出洞钓鱼啦,时间,温度,潮汐,不都是数字嘛!记得把钓点的GPS数字也报上为好。
object BladeCalculation {
def main(args: Array[String]): Unit = {
val target : Int = 1000
val bladeSizes = Array(51,76,102,152,203,254,305,330,381,406,432,457,508,559,635,660,711,762,813,889)
var gap : Int = 1000
var output = ""
for(windowSize <- 1 to 10) {
for(slide <- 0 to bladeSizes.length-windowSize-1) {
val selected = new Array[Int](windowSize)
for (i <- 0 to windowSize - 1) {
selected(i) = bladeSizes(slide + i)
}
println("selected numbers to compare-"+selected.mkString(","))
for (j <- 0 to bladeSizes.length - 1) {
if (!selected.contains(bladeSizes(j))) {
val total = selected.sum + bladeSizes(j)
if (Math.abs(total - target) < gap) {
gap = Math.abs(total - target)
output = selected.mkString(",")+","+bladeSizes(j)
}
}
}
}
}
println("best blade combination choice is ->"+output)
}
}


