天天看点

百钱百鸡算法优化

点击查看代码

package bqbj;

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");
						}
					}
					
				}
				
			}
			
		}
		
		
	}

 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");
				}
			}
		}
	}
 
 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