七叶笔记 » golang编程 » golang解决百钱百鸡问题

golang解决百钱百鸡问题

 package main

import (
"fmt"
"time"
)

// 百鸡问题是一个数学问题,出自中国古代约5—6世纪成书的《张丘建算经》
// 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
//翻译成现代汉语: 公鸡五钱一只,母鸡3钱一只,小鸡1钱3只  花费100钱买100只鸡
//翻译成数学语言:
// '从 现代数学 观点来看,实际上是一个求不定方程整数解的问题。解法如下:

//     '设公鸡、母鸡、小鸡分别为a、b、c 只,由题意得:

//     '①……a+b+c =100

//     '②……5a+3b+c/3 =100

func main01() {
循环次数 := 0
for a := 0; a <= 100; a++ {
for b := 0; b <= 100; b++ {
for c := 0; c <= 100; c += 3 {
循环次数 += 1
if a+b+c == 100 && a*5+b*3+c/3 == 100 {
fmt.Printf("公鸡:%d 母鸡:%d 小鸡:%d \n", a, b, c)
}
}
}
}
fmt.Printf("总共循环次数 %d \n", 循环次数)
}
func main02() {
循环次数 := 0
for a := 0; a <= 100/5; a++ {
for b := 0; b <= 100/3; b++ {
循环次数 += 1
c := 100 - a - b
if a*5+b*3+c/3 == 100 && c%3 == 0 {
fmt.Printf("公鸡:%d 母鸡:%d 小鸡:%d \n", a, b, c)
}

}
}
fmt.Printf("总共循环次数 %d \n", 循环次数)
}
func main() {
startTime := time.Now()
main01()
elapsedTime := time.Since(startTime) / time.Millisecond
fmt. Printf ("算法一完成,用时:%d毫秒 \n", elapsedTime)

startTime = time.Now()
main02()
elapsedTime = time.Since(startTime) / time.Millisecond
fmt.Printf("算法二完成,用时:%d毫秒\n", elapsedTime)
}
  

代码要点:

第24行 for c := 0; c <= 100; c += 3 {

c小鸡必定要求是3的倍数,即0,3,6,所以直接以3步进

第40行c%3 == 0 {

要求c整除3为0,否则可能算出很多不合条件的解

主控main程序中使用time包计时

公鸡:0 母鸡:25 小鸡:75

公鸡:4 母鸡:18 小鸡:78

公鸡:8 母鸡:11 小鸡:81

公鸡:12 母鸡:4 小鸡:84

总共循环次数 346834

算法一完成,用时:1毫秒

公鸡:0 母鸡:25 小鸡:75

公鸡:4 母鸡:18 小鸡:78

公鸡:8 母鸡:11 小鸡:81

公鸡:12 母鸡:4 小鸡:84

总共循环次数 714

算法二完成,用时:0毫秒

相关文章