五家共井算法

上一篇 / 下一篇  2013-12-24 14:44:52 / 天气: 晴朗 / 心情: 高兴

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

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

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

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

算法分析:根据题目可以列的一下方程(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的倍数。

具体算法:

public class WJGJ

{  

    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]循环(因为x太大了)   

                  

                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]);  

  

    }  

  

}  


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 42888
  • 日志数: 22
  • 建立时间: 2013-05-29
  • 更新时间: 2013-12-28

RSS订阅

Open Toolbar