`
v5browser
  • 浏览: 1141536 次
社区版块
存档分类
最新评论

五家共井算法

 
阅读更多

五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子

一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打

到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。

最后问:井有多深?每家的绳子各有多长?

算法分析:根据题目可以列的一下方程(len为井深)

len1*2+len2 = len

len2*3+len3 = len

len3*4+len4 = len

len4*5+len5 = len

len5*6+len1 = len

进一步化简

len1=len2+len3/2

len2=len3+len4/3

len3=len4+len5/4

len4=len5+len1/5

从上面算式可以得到len3是2的倍数,len4是3的倍数,len5是4的倍数,len1是5的倍数

package suanfa;
public class Example_6{
	static void WJGJ(int[] len1,int[] len2,int[] len3,int[] len4,int[] len5,int[] len)	//五家共井算法
	{
		for(len5[0]=4; ;len5[0]+=4)                     //len5为4的倍数 
			
			for(len1[0]=5; ;len1[0]+=5)                 //len1为5的倍数 
			{ 
				len4[0]=len5[0]+len1[0]/5; 
				len3[0]=len4[0]+len5[0]/4; 
				
				if(len3[0]%2!=0||len4[0]%3!=0)
					continue;                          //如果不能被2整除或若不能被3整除,进行下一次循环 
				
				len2[0]=len3[0]+len4[0]/3; 
				if(len2[0]+len3[0]/2<len1[0])
					break;                             //切回len5[0]循环
				
				if(len2[0]+len3[0]/2==len1[0])
				{ 
					len[0]=2*(len1[0])+(len2[0]);     //计算井深 
					return;
				} 
			} 
	   								

	}
	public static void main(String[] args)
	{
		int[] len1={0};
		int[] len2={0};
		int[] len3={0};
		int[] len4={0};
		int[] len5={0};
		int[] len={0};
			
		WJGJ(len1,len2,len3,len4,len5,len);				//求解算法
		
	    System.out.printf("五家共井问题求解结果如下:\n");					//输出结果
	    System.out.printf("甲家井绳长度为:%d\n",len1[0]);
	    System.out.printf("乙家井绳长度为:%d\n",len2[0]);
	    System.out.printf("丙家井绳长度为:%d\n",len3[0]);
	    System.out.printf("丁家井绳长度为:%d\n",len4[0]);
	    System.out.printf("戌家井绳长度为:%d\n",len5[0]);
	    System.out.printf("井深:%d\n",len[0]);

	}

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics