听说是“创新工厂”的一道面试题

 
题目如下:
 
ABCDE五人打渔,打完睡觉,A先醒来,扔掉1条鱼,把剩下的分成5分,拿一份走了;B再醒来,也扔掉1条,把剩下的分成5份,拿一份走了;然后CDE都按上面的方法取鱼。问他们一共打了多少条鱼. 答案有多个。
 
解题过程:

总鱼数x条:
剩余 = 鱼数 - (鱼数-1)/剩下未拿鱼的人数
y = 4(x-1)/5  y=2496
z = 4(y-1)/5  z = 1996
m = 4(z-1)/5  m= 1596
n = 4(m-1)/5   n= 1276
p = 4(n-1)/5   p= 1020

p:最后剩余鱼数量
x:总共的鱼数量

 

上面是5个人分别拿走鱼之后,剩余的鱼数量。

可以通过多元多次方程式 简化如下:

 

p= (4n+1)/5 => (5p+4)/4 = n


(5p+4)/4 =4(m-1)/5 => 25p+20 = 16m-16 => (25p+36)/16 = m

 

(25p+36)/16 = 4(z-1)/5   =>   125p+180 =64z-64  => (125p+244)/64 = z


(125p+244)/64 = 4(y-1)/5 =>  625p+1220 = 256y-256 => (625p+1476)/256 = y

 

(625p+1476)/256 = 4(x-1)/5

 

最后可以通过,这个公式计算出来很多结果,但由于每次取的鱼数量必须是整数,

所以公式计算出来的结果中,还是有错误的。

//推到出来公式  (625p+1476)/256 = 4(x-1)/5   p:最后剩余的鱼数量   x:总共的鱼数量
		//假设鱼在10000条以内
		for(int i = 5 ;i<=10000 ;i++){
			 if( ((256*4*(i-1))/5-1476)%625 == 0 ){
				 int p = ((256*4*(i-1))/5-1476)/625;
				  System.out.println("X:"+i+",P:"+p);
			 }
		}

 

最后,通过程序循环,调用每一个公式,获取正确结果,答案如下:


 

		/*记录5人取鱼的数量*/
		int []res= new int[5];
		int count = 1;	
		/*假设鱼数量在10000以内*/
		for(int i = 5;i<=10000;i++){		
			int temp_var = 0;
			for(int j =0;j<5; j++){
				if(j == 0){
					if( (i-1)*4%5 == 0 ){
						temp_var = (i-1)*4/5;
						res[j] = i - 1 - temp_var;
					}else{
						break;
					}
				}else{
					if( (temp_var-1)*4%5 == 0 ){
						int temp_var1 = (temp_var-1)*4/5;
						res[j] = temp_var - 1 - temp_var1;
						temp_var = temp_var1;
					}else{
						break;
					}
				}
				if(j == 4){
					System.out.println("************答案"+(count++)+"************");
					System.out.println("共钓到鱼的总数:"+i+",剩余鱼的总数:"+temp_var);
					for(int p = 0; p<5 ;p++){
						System.out.println("第"+(p+1)+"个人,拿走了"+res[p]+"条鱼");
					}
				}
			}
			
		}


运行结果如下:
 
************答案1************
共钓到鱼的总数:3121,剩余鱼的总数:1020
第1个人,拿走了624条鱼
第2个人,拿走了499条鱼
第3个人,拿走了399条鱼
第4个人,拿走了319条鱼
第5个人,拿走了255条鱼
************答案2************
共钓到鱼的总数:6246,剩余鱼的总数:2044
第1个人,拿走了1249条鱼
第2个人,拿走了999条鱼
第3个人,拿走了799条鱼
第4个人,拿走了639条鱼
第5个人,拿走了511条鱼
************答案3************
共钓到鱼的总数:9371,剩余鱼的总数:3068
第1个人,拿走了1874条鱼
第2个人,拿走了1499条鱼
第3个人,拿走了1199条鱼
第4个人,拿走了959条鱼
第5个人,拿走了767条鱼

你可能感兴趣的:(java,编程题)