Go语言 百钱百鸡问题
作者:互联网
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
解法一:完全用程序来解,假设先买公鸡,用剩下的钱再买母鸡:
package main
import "fmt"
func main() {
//一只公鸡值五钱 ,一只母鸡值三钱 三只小鸡值一钱 现在要用百钱买百鸡,请问公鸡 母鸡 小鸡各多少只
sum:=0
for i := 0; i <= 100; i+=5 { //买公鸡的钱只能是5的倍数
for j := 0; j<=100 -i;j+=3 { //买母鸡的钱只能是3的倍数
//if (i+j)<=100-33 { //剩下买小鸡的钱不能超过100只小鸡的钱,即不能多于33钱
// continue
//}
iz:=i/5
jz:=j/3
//if (100-iz-jz)%3!=0 {//剩下的小鸡只数如果不是3的倍数,则不再继续
// continue
//}
xz:=(100-i-j)*3
sum++
if 100-iz-jz==xz{
fmt.Println("公鸡:",iz,"只",i,"钱,","母鸡:",jz,"只",j,"钱,",",小鸡:",xz,"只",100-i-j,"钱")
}
}
}
fmt.Println("循环",sum,"次")
}
控制台输出结果:
公鸡: 0 只 0 钱, 母鸡: 25 只 75 钱, ,小鸡: 75 只 25 钱
公鸡: 4 只 20 钱, 母鸡: 18 只 54 钱, ,小鸡: 78 只 26 钱
公鸡: 8 只 40 钱, 母鸡: 11 只 33 钱, ,小鸡: 81 只 27 钱
公鸡: 12 只 60 钱, 母鸡: 4 只 12 钱, ,小鸡: 84 只 28 钱
循环 364 次
Process finished with exit code 0
解法二:计算出100钱最多买公鸡 20只,母鸡33只,小鸡 300只,在for循环里用只数来进行迭代:
package main
import "fmt"
func main(){
sum:=0
for i := 0; i <= 20; i++ {
for j := 0; j <= 33; j++ {
x:=100-i-j
sum++
if x%3 == 0 && i*5+j*3+x/3 == 100 {
fmt.Printf("公鸡%d只,母鸡%d只,小鸡%d只\n",i,j,x)
}
}
}
fmt.Printf("循环%d次",sum)
}
输出结果为:
公鸡0只,母鸡25只,小鸡75只
公鸡4只,母鸡18只,小鸡78只
公鸡8只,母鸡11只,小鸡81只
公鸡12只,母鸡4只,小鸡84只
循环714次
Process finished with exit code 0
总结:第一种方法共循环364次,第二种方法共循环714次。第一种方法用过滤掉了“公鸡+母鸡>100钱”的循环,因此第一种方法循环次数更少
标签:25,母鸡,公鸡,百钱,小鸡,循环,Go,百鸡,main 来源: https://blog.csdn.net/u010509254/article/details/89737032