写一个算法,输入四个整数,a1,a2,b1,b2
a1a2为一对,b1b2为一对,
求两对的公共区间.
如输入1,10,5,15
则表示[1,10]和[5,15]的公共区间为[5,10]这道题虽然简单,但我只能想到用常规的方法解答,即是三个IF语句,每个IF语句里面又嵌套一两个IF语句,
大家有没有更好一点的算法呢
(虽然说在这么小的一个问题上研究没什么实际意义)
但希望从大家的解答中能开拓一下自己的思维

解决方案 »

  1.   

    额 [a1>b1?a1:b1,a2>b2?a2:b2]
    是这个意思吗
      

  2.   

    思路:
    1、a1和a2比较,较大值赋给c1
    2、c1和bn比较(如果a1大于a2,则和b2比较;如果a2大于a1,则和b1比较),如果c1大,则没有公共区间,否则,公共区间为c1:bn
      

  3.   


            static void GetCommonArea(int a1, int a2, int b1, int b2)
            {
                if (a1 > a2)
                {
                    GetCommonArea(a2, a1, b1, b2);
                    return;
                }
                if (b1 > b2)
                {
                    GetCommonArea(a1, a2, b2, b1);
                    return;
                }
                if (a1 > b1)
                {
                    GetCommonArea(b1, b2, a1, a2);
                    return;
                }
                if (a2 < b1)
                {
                    Console.WriteLine("无公共区间");
                    return;
                }
                if (a2 > b2)
                {
                    GetCommonArea(a1, b2, b1, a2);
                    return;
                }
                Console.WriteLine("公共区间为:{0}---{1}", b1, a2);
            }
      

  4.   

     if(a>b1||b<a1)
                {
                    Console.WriteLine ("没公共区间");
                }            else if (a >= a1)
                {
                    Console.WriteLine(a);
                }
                else
                {
                    Console.WriteLine(a1);
                }
                if (b >= b1)
                {
                    Console.WriteLine(b1);
                }
                else
                {
                    Console.WriteLine(b);
                }            Console.ReadLine();
    这样就按你说的应该很好了呀
      

  5.   

    可以利用泛型来就比较简单了代码如下:
     public string Convent(int a1, int a2, int b1, int b2) {
                List<int> aList = new List<int>();
                List<int> bList = new List<int>();
                aList.Add(a1);
                aList.Add(a2);
                bList.Add(b1);
                bList.Add(b2);
                aList.Sort();
                bList.Sort();
                if (aList[1] < bList[0] || aList[0] > bList[1]) {
                    return "无公共区间";
                }
                aList.AddRange(bList);
                aList.Sort();
                if (aList[1] ==aList[2]) {
                    return ("公共区间为:" + aList[1].ToString());
                }
                return ("公共区间:" + aList[1].ToString() +"~"+ aList[2].ToString());
            }
      

  6.   

    数学模型啊min(x),max(y) 条件 (x<=y)
    奇怪来着,现在的人都不用数学模型滴,这两天博客园热论“有道难题”,实际数学模型一建,代码自动就蹦出来了