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!");
}
}
}