C#设计一函数,求整数区间[a,b]和[c,d]的交集。

class Program
    {
        static void Main(String[] args)
        {
            //求整数区间[a,b]和[c,d]的交集。
            try
            {
                while (true)
                {
                    Console.WriteLine("input:[a,b] [c,d]");
                    string s = Console.ReadLine();
                    int.TryParse(s.Substring(s.IndexOf('[') + 1, s.IndexOf(',') - s.IndexOf('[') - 1), out int a);
                    int.TryParse(s.Substring(s.IndexOf(',') + 1, s.IndexOf(']') - s.IndexOf(',') - 1), out int b);
                    int.TryParse(s.Substring(s.LastIndexOf('[') + 1, s.LastIndexOf(',') - s.LastIndexOf('[') - 1), out int c);
                    int.TryParse(s.Substring(s.LastIndexOf(',') + 1, s.LastIndexOf(']') - s.LastIndexOf(',') - 1), out int d);
                    /*
                    要求:a < b ,c<d  否则输出“input error!”

                    当a<c<b<d时,[c,b]
                    当a<c<d<b时,[c,d]
                    当a<b<c<d时,无交集
                    当c<d<a<b时,无交集
                    当c<a<b<d时,[a,b]
                    当c<a<d<b时,[a,d]
                     */
                    if (a >= b || c >= d)
                    {
                        Console.WriteLine("Collection interval input error, please re-enter!");
                    }
                    else
                    {
                        if (a < c)
                        {
                            if (b > d)
                            {
                                //[c,d]
                                Console.WriteLine("[{0},{1}]", c, d);
                            }
                            else
                            {
                                if (b >= c)
                                {
                                    //[c,b]
                                    Console.WriteLine("[{0},{1}]", c, b);
                                }
                                else
                                {
                                    //无交集
                                    Console.WriteLine("no common");
                                }
                            }
                        }
                        else
                        {
                            if (b < d)
                            {
                                //[a,b]
                                Console.WriteLine("[{0},{1}]", a, b);
                            }
                            else
                            {
                                if (a > d)
                                {
                                    //无交集
                                    Console.WriteLine("no common");
                                }
                                else
                                {
                                    //[a,d]
                                    Console.WriteLine("[{0},{1}]", a, d);
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
                Console.WriteLine("input error!");
            }

            Console.ReadKey();
        }
    }

更简单的方式:

比较a和c,大的作为交集的开始,比较b和d,小的作为交集的结束,如果开始比结束还要大,那就说明没交集,否则返回交集就行了

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                while (true)
                {
                    Console.WriteLine("input:[a,b] [c,d]");
                    string s = Console.ReadLine();
                    int.TryParse(s.Substring(s.IndexOf('[') + 1, s.IndexOf(',') - s.IndexOf('[') - 1), out int a);
                    int.TryParse(s.Substring(s.IndexOf(',') + 1, s.IndexOf(']') - s.IndexOf(',') - 1), out int b);
                    int.TryParse(s.Substring(s.LastIndexOf('[') + 1, s.LastIndexOf(',') - s.LastIndexOf('[') - 1), out int c);
                    int.TryParse(s.Substring(s.LastIndexOf(',') + 1, s.LastIndexOf(']') - s.LastIndexOf(',') - 1), out int d);

                    int start = Math.Max(a, c);
                    int end = Math.Min(b, d);
                    if(start > end)
                    {
                        Console.WriteLine("No intersection!");
                    }
                    else
                    {
                        Console.WriteLine("[{0},{1}]", start, end);
                    }
                }
            }
            catch
            {
                Console.WriteLine("input error!");
            }
        }
    }

 

 

posted @ 2019-09-20 14:55  highlightyys  阅读(27)  评论(0编辑  收藏  举报