题解11:区间交交
基本思想:先把第一个区间里面的存放进结构体中,接着用循环对第二个区间的值进行输入和对第一个区间的判断,最后输出结果,一定是两个两个进行比较,因为是成对的。
AC代码:
#include<stdio.h>
struct list
{
double b;
double e;
}sz[100];//定义一个结构体,用来存放第一个区间内的数据
int main()
{
int n,m,i,j,k;
double sum=0,x,y;//定义成浮点型比较保险
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf%lf",&sz[i].b,&sz[i].e);//把第一个区间内的数据存放到结构体里面
scanf("%d",&m);
if(n>=m)//当两个区间长度不一样时
k=m;
else
k=n;
while(m–)
{
scanf("%lf%lf",&x,&y);//对第二个区间每队数据的输入
for(j=0;j<k;j++)//循环判断
{
if(x>sz[j].b&&y<sz[j].e)//利用数学知识进行判断
sum+=y-x;
else if(x>sz[j].b&&y>sz[j].e&&x<sz[j].e)
sum+=sz[j].e-x;
else if(x<sz[j].b&&y>sz[j].b&&y<sz[j].e)
sum+=y-sz[j].b;
else if(x<sz[j].b&&y>sz[j].e)
sum+=sz[j].e-sz[j].b;
}
}
printf("%.3lf",sum);//按照格式输出
return 0;
}
注意事项:
1.输出格式
2.数学逻辑判断
3.数据类型的控制