鸡兔同笼类似问题,来个过程

学校计划用50000元的资金给各处室配置相同品牌的A.B两种类型的电脑,A.型电脑报价6000元.B型7000元,根据需要两种电脑共购买8台,A.B型各要多少台?

C语言太麻烦了,Go语言也差不多,对着翻译吧

package main

import "log"

//TODO: 这个函数是通用的,感兴趣可以自己实现
//total 为总预算(比如50000)
//prices 是一个数组, 为N个商品的价格(比如[6000, 7000]...)
//num 为总数
//
//返回值是每个价格的商品对应的购买数量的多种可能性,key为花费,value为购买数量
func calculateUniversal(total float64, num int, prices ...float64) map[float64][]int {
    // total >= prices[0]*x1 + prices[1]*x2 + ... + prices[N-1]*xN
    return nil
}

//total: 总预算
//aCost, bCost: 两种商品的价格
//num: 总数
//
//返回值: map的key是总花费,value是一个数组,包含了两个元素: a,b商品的数量
//
//计算方式:
//aNum + bNum <= num
//aNum*aCost + bNum*bCost <= total
func calculate(total, aCost, bCost, num int) map[int][]int {
    //结果
    var result = make(map[int][]int)

    //从全部买a开始
    for aNum := num; aNum >=0; aNum-- {
        //b数量
        bNum := num - aNum
        //1.计算总花费
        var costA = aNum*aCost
        var costB = bNum*bCost
        var cost = costA + costB

        //2.超预算了,就不用算了
        if cost > total {
            continue
        }

        //3.把当前的总花费和A,B各自的数量存起来
        result[cost] = append(result[cost], aNum, bNum)
    }
    return result
}

func main()  {
    //测试
    var total = 50000 //预算50000
    var aCost = 6000  //a价格6000
    var bCost = 7000  //b价格7000
    var num = 8       //总数8
    result := calculate(total, aCost, bCost, num)
    //打印所有可能结果
    for k, v := range result {
        log.Printf("总预算=%d: A数量:%v, B数量:%v\n", k, v[0], v[1])
    }
}

执行结果:

2022/01/10 15:56:07 总预算=50000: A数量:6, B数量:2
2022/01/10 15:56:07 总预算=48000: A数量:8, B数量:0
2022/01/10 15:56:07 总预算=49000: A数量:7, B数量:1