五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子
一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打
到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。
最后问:井有多深?每家的绳子各有多长?
算法分析:根据题目可以列的一下方程(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]);
}
}