生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。人

百钱百鸡算法优化

关于百钱百鸡问题以及算法优化
问题描述:
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

解法如下:

点击查看代码
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
posted @   冰白寒祭  阅读(361)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理 了,记录一下
点击右上角即可分享
微信分享提示