百钱百鸡算法优化
关于百钱百鸡问题以及算法优化
问题描述:
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
解法如下:
点击查看代码
public class Bqbj { public static void main(String[] args) { long startTime=System.nanoTime(); //获取开始时间 Bqbj s1 = new Bqbj(); s1.suanfa1();//测试的代码段 long endTime=System.nanoTime(); //获取结束时间 System.out.println("程序运行时间: "+(endTime-startTime)+"ns"); long startTime1=System.nanoTime(); //获取开始时间 Bqbj s2 = new Bqbj(); s2.suanfa2();//测试的代码段 long endTime1=System.nanoTime(); //获取结束时间 System.out.println("程序运行时间: "+(endTime1-startTime1)+"ns"); long startTime2=System.nanoTime(); //获取开始时间 Bqbj s3 = new Bqbj(); s3.suanfa3();//测试的代码段 long endTime2=System.nanoTime(); //获取结束时间 System.out.println("程序运行时间: "+(endTime2-startTime2)+"ns"); } //穷举法 void suanfa1(){ int i,j,k; for(i = 0;i<=100;i++) { for(j = 0;j<=100;j++) { for(k = 0;k<=100;k++) { if((i + j + k == 100)&&(5*i + 3*j + k/3 == 100)) { if(k%3==0) { System.out.println("公鸡为" + i +"\t"+"母鸡为" + j +"\t"+"小鸡为" + k +"\t"); } } } } } } //第一次优化,小鸡(k)用已有变量(母鸡(j))表示 void suanfa2() { int i,j,k,m; for(i=0;i<=20;i++){ m = 100-i*5; //缩小了i的范围,减少了遍历 for(j=0;j<=m/3;j++){ k=3*(m-3*j); //k直接可以求出来,不需要在用一个循环 if(i+j+k==100){ System.out.println("公鸡为" + i +"\t"+"母鸡为" + j +"\t"+"小鸡为" + k +"\t"); } } } } //第二次优化,在第一次优化的基础上,将母鸡(j)也用已有变量(公鸡(i))表示 void suanfa3() { int i,j,k; for(i = 0;i <= 20;i++) { j = (200-14*i)/8; if(j>=0) { k =100-i-j; if((i + j + k == 100)&&(5*i + 3*j + k/3 == 100)) { System.out.println("公鸡为" + i +"\t"+"母鸡为" + j +"\t"+"小鸡为" + k +"\t"); } } } } }
点击查看代码
公鸡为0 母鸡为25 小鸡为75 公鸡为4 母鸡为18 小鸡为78 公鸡为8 母鸡为11 小鸡为81 公鸡为12 母鸡为4 小鸡为84 程序运行时间: 2106100ns 公鸡为0 母鸡为25 小鸡为75 公鸡为4 母鸡为18 小鸡为78 公鸡为8 母鸡为11 小鸡为81 公鸡为12 母鸡为4 小鸡为84 程序运行时间: 76900ns 公鸡为0 母鸡为25 小鸡为75 公鸡为4 母鸡为18 小鸡为78 公鸡为8 母鸡为11 小鸡为81 公鸡为12 母鸡为4 小鸡为84 程序运行时间: 63100ns
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下