题目
公鸡 5钱/只 母鸡3钱/只 小鸡1钱/3只 需要用一百钱买一百鸡
解
先用个最粗暴的方式完成题目,之后进行优化,我用count变量来计算循环次数
方法1
实现
func main1() {
count:=0
for i := 0; i <= 20; i++ {
for j := 0; j <= 33 ; j++{
for k := 0; k <= 100 ; k++{
count++
if i+j+k ==100 && i*5 + j*3 +k/3 ==100 && k%3 ==0{
fmt.Printf("公鸡%d ,母鸡%d , 小鸡%d\n",i,j,k)
}
}
}
}
fmt.Println("次数",count)
}
结果
优化1
我们可以看到小鸡每次都会是3只一起买的,我们可以对小鸡每次增长的数量进行变化,每次增长3,通过运行可以看到次数明显减少
func main() {
//优化1 小鸡每次都需要买3只,小鸡每次增长数量设置为3
count:=0
for i := 0; i <= 20; i++ {
for j := 0; j <= 33 ; j++{
for k := 0; k <= 100 ; k+=3{
count++
if i+j+k ==100 && i*5 + j*3 +k/3 ==100 && k%3 ==0{
fmt.Printf("公鸡%d ,母鸡%d , 小鸡%d\n",i,j,k)
}
}
}
}
fmt.Println("次数",count)
}
优化2
我们可以发现小鸡的个数 = 100-公鸡-母鸡,这样可以减掉一层循环
func main() {
//优化2 小鸡的个数 = 100-公鸡-母鸡
count:=0
for i := 0; i <= 20; i++ {
for j := 0; j <= 33 ; j++{
count++
k := 200 - i - j
if i*5 + j*3 +k/3 ==100 && k%3 ==0{
fmt.Printf("公鸡%d ,母鸡%d , 小鸡%d\n",i,j,k)
}
}
}
fmt.Println("次数",count)
}
更优解法可以简化为一层循环,需要运用数学的方法求出三种鸡直接的关系进行优化,这里就不说了。