问题遇到的现象和发生背景
如何改变这个代码,将输入0为结束标志以满足题目要求;
题目;电视节目安排
领导给小吴安排了一个任务,要求小吴把明天电视节目排列上映,小吴要尽可
能的安排最多的节目。节目开始 start 和结束时间 end(0<=start<end<=23)。
【输入格式:】
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数 n(n≤100),
表示喜欢看的节目的总数,然后是 n 行数据,每行包括两个数据 start_i,end_i,分
别表示第 i 个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表
示。n=0 表示输入结束,不做处理。_
【输出格式:】
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出
占一行。
输入样例:
在这里给出一组输入。例如:
12
1 3
3 4
0 7
3 8
15 / 26
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
输出样例:5
在这里给出相应的输出。例如:
用代码块功能插入代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//取活动时间结束最早的的,作为最先选择的元素
int n;
void px(int* a, int* b );
void Choose(int len, int* s, int* f);
int sum = 1;//排好后最早结束的节目必选
int main()
{
scanf("%d", &n);
int s[101], e[101];
for (int i = 0; i < n; i++) {
scanf("%d %d", &s[i], &e[i]);
}
px(e,s);//按照结束时间从小到大排序
Choose(n,s,e);
printf("%d", sum);
return 0;
}
void px(int* a,int* b ) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n - 1 - i; j++)
if (a[j + 1] < a[j]) {
int temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
int t = b[j + 1];
b[j + 1] = b[j];
b[j] = t;
}
}
void Choose(int len, int* s, int* e)//核心代码
{
int j = 0;
for (int i = 1; i < len; ++i)
if (s[i] >= e[j])
{
sum++;
j = i;
}
}