yiyi: 开始是题目没看清楚,不懂得它的用意是为了尽量看多的完整的节目。所以把它想复杂了,弄了好久都不知道要怎么写。后来认真的看了题目,才明白了。
本来结束时间排序时,想用sort()这个函数的,后来发现不可以,因为开始时间和结束时间是一对的,所以后面我还是用了自己平常用的排序方法,但在这个排序中我第一次用到了swap()来交换数值,才知道原来许多头文件中早就已经包含了许多好用的函数。还有就是,每次用到C++中东西时,老是忘了加命名空间(using namespace std;),以后一定要记得!!!加油!!!
Input
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
目标是看尽量多的节目!
Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
Sample Input
12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
Sample Output
5
答案:
#include <stdio.h>
#include <iostream>
using namespace std;
int main () {
int n, i, j,term;
int s[100], e[100];
while (scanf("%d", &n) != EOF && n != 0) {
for (i = 0; i < n; i++) {
scanf("%d%d", &s[i], &e[i]);
}
//将结束时间进行排序
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) {
if (e[i] > e[j]) {
swap(e[i],e[j]);
swap(s[i],s[j]);
}
}
}
term = 1;
for (i = 1; i < n; i++) {
if (s[i] >= e[0]) {
term++;
e[0] = e[i];
}
}
printf("%d\n", term);
}
return 0;
}