一组区间中交集最多的一个

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define NUM 30 //区间个数

typedef struct
{
int min; //区间中最小值
int max; //区间中最大值
int diff; //区间的大小
}extent;

int Max(int a,int b)
{
if (a>=b)
{
return a;
}
else
{
return b;
}

}

int Min(int a,int b)
{
if (a<=b)
{
return a;
}
else
{
return b;
}
}


int main()
{
extent a[NUM]; //这么多组区间
extent tep[(NUM*(NUM-1))/2]; //需要比较的区间,共num*(num-1)/2个
extent result;
int i,j;
int m=-1;
srand(time(0));
for (i=0;i<NUM;i++) //初始化区间
{
a[i].min=rand()%10;
a[i].max=rand()%10+10;
cout<<a[i].min<<""<<a[i].max<<endl;
}

for (i=0;i<NUM-1;i++) //m个区间需要比较1+2+3+...+m-1这么多个
{
for (j=i+1;j<NUM;j++)
{
m++;
tep[m].min=Max(a[i].min,a[j].min);
tep[m].max=Min(a[i].max,a[j].max);
tep[m].diff=tep[m].max-tep[m].min;
}
}

int Mdiff=-1;
for (i=0;i<(NUM*(NUM-1))/2;i++) //找出比较后最大的区间
{
if (tep[i].diff>Mdiff)
{
Mdiff=tep[i].diff;
result.max=tep[i].max;
result.min=tep[i].min;
result.diff=tep[i].diff;
}
}

cout<<endl;
cout<<result.min<<""<<result.max<<endl;
cout<<result.diff<<endl;

system("pause");
return 0;
}
原文地址:https://www.cnblogs.com/tiandsp/p/2337146.html