题意:给了你一系列的区间,叫你求输入哪些区间是被给出的。 像这样的的区间 [5,6] [6,8]可以合并为一个区间[5,8]; 解题思路:先对输入的区间进行排序,然后对区间进行合并。(具体实现看代码) 代码: #include <iostream> using namespace std; #include <stdlib.h> typedef struct { int x; int y; }weizhi; weizhi data[50001]; int cmp(const void *a,const void *b)//第一次使用qsort对两个变量的进行排序 按照的是先x从小到大, //y从小到大 { weizhi *p1=(weizhi *)a; weizhi *p2=(weizhi *)b; if(p1->x==p2->x) return p1->y - p2->y; return p1->x - p2->x; } int main() { int n,i,first,last,j; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&data[i].x,&data[i].y); qsort(data,n,sizeof(weizhi),cmp);//排序函数 first=data[0].x; last=data[0].y; for(i=1;i<n;i++) { if(last>=data[i].x && last<data[i].y) //对last进行修改 { last=data[i].y; continue; } if(last>data[i].x && last>data[i].y) continue; if(last<data[i].x) //这个区间已经不能被合并了 { printf("%d %d/n",first,last); first=data[i].x; last=data[i].y; } } printf("%d %d/n",first,last); return 0; }