http://blog.youkuaiyun.com/zhsenl/article/details/7488758
在一条直线上有n条线段,已知它们的两个端点。请完成一下代码(两种语言任挑其一),计算这些线段共覆盖了多大的长度(被多条线段覆盖的部分只计算一次)。
如Segment:{[1,9],[5,10]} Sum=9;
C/C++:
struct Segment
{
int start;
int end;
}
int Sum(int n, Segment * segments) //n是segments包含的元素个数
{
……
}
代码
#include <iostream>
using namespace std;
struct Segment
{
int start;
int end;
};
int Sum(int n, Segment *segments)
{
int sum = 0;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
if(segments[i].start==segments[i].end || segments[j].start==segments[j].end)
continue;
else if(segments[i].start>=segments[j].start && segments[i].start<=segments[j].end)
{
segments[i].start = segments[j].start;
segments[j].start = segments[j].end = 0;
}
else if(segments[i].end>=segments[j].start && segments[i].end<=segments[j].end)
{
segments[i].end = segments[j].end;
segments[j].start = segments[j].end = 0;
}
}
for(int i=0; i<n; i++)
{
if(segments[i].start==segments[i].end)
continue;
else
{
sum += ((segments[i].end-segments[i].start)+1);
}
}
return sum;
}
int main()
{
Segment s1,s2,s3;
s1.start = 0;
s1.end = 5;
s2.start = 3;
s2.end = 7;
s3.start = 9;
s3.end = 13;
Segment ss[] = {s1, s2, s3};
cout<<"Hello: "<<Sum(3, ss)<<endl;
return 0;
}