zoukankan      html  css  js  c++  java
  • java算法---五家共井

    古代数学巨著《九章算数》中有这么一道题叫“五家共井,甲二绠(汲水用的井绳)不足,如(接上)乙一绠;乙三绠不足,如丙一绠;

    丙四绠不足,如丁一绠;丁五绠不足,如戊一绠;戊六绠不足,如甲一绠,皆及。

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

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

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

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

    算法分析:根据题目可以列的一下方程(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 练习;
    
    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("五家共井问题求解结果如下:
    "); // 输出结果
    
            System.out.printf("甲家井绳长度为:%d
    ", len1[0]);
    
            System.out.printf("乙家井绳长度为:%d
    ", len2[0]);
    
            System.out.printf("丙家井绳长度为:%d
    ", len3[0]);
    
            System.out.printf("丁家井绳长度为:%d
    ", len4[0]);
    
            System.out.printf("戌家井绳长度为:%d
    ", len5[0]);
    
            System.out.printf("井深:%d
    ", len[0]);
    
        }
    
    }

    用c也可以实现

    代码如下

    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a, b, c, d, e, h;
    
                a = b = c = d = e = h = 0;
    
                bool flag = true;
    
                while (flag)
                {
                    //4的倍数
                    e += 4;
    
                    a = 0;
    
                    while (flag)
                    {
                        //5的倍数
                        a += 5;
    
                        d = e + a / 5;
    
                        c = d + e / 4;
    
                        if (c % 2 != 0)
                            continue;
    
                        if (d % 3 != 0)
                            continue;
    
                        b = c + d / 3;
    
                        if (b + c / 2 < a)
                            break;
    
                        if (b + c / 2 == a)
                            flag = false;
                    }
                }
    
                h = 2 * a + b;
    
                Console.WriteLine("a={0},b={1},c={2},d={3},e={4} ------h={5}
    ", a, b, c, d, e, h);
    
                Console.Read();
            }
        }
    }
  • 相关阅读:
    Investment_完全背包
    Recaman's Sequence_递推
    MooFest_二维树状数组
    Mobile phones_二维树状数组
    Matrix_二维树状数组
    Get Many Persimmon Trees_枚举&&二维树状数组
    树状数组基础知识
    The Cow Lineup_找规律
    [SOJ] 简单哈希
    sscanf() 函数
  • 原文地址:https://www.cnblogs.com/oumyye/p/4302204.html
Copyright © 2011-2022 走看看