今天我来跟大家分享一个很有意思的题目,相信大家都会对这道题感兴趣
首先呈现题目
让我们来分析一下题目,第一行输入总共喜欢看的电视剧个数,之后的n行中的两个值分别表示节目的开始时间和结束时间。我们需要在一个时间段里找出能看最多部喜欢的电视的值。
首先进行值的输入
while(scanf("%d",&n)!=EOF&&n!=0){
for(int i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
这里需要用到多组数组输入,博主之前已经分享过多组数组输入的方法了,在这里就不多做赘述了,还需要运用for循环进行每一次值的输入。
接下来到了重要的地方
我们需要找出每一个电视剧开始和结束的时间,并对它们分别进行升序排序
我这里用到的方法是选择排序,如果大家有更好的方法也可以使用
for(int i=0;i<n-1;i++)
for(int j=0;j<n-1-i;j++){
if(b[j]>b[j+1]){
t=a[j],a[j]=a[j+1],a[j+1]=t;
t=b[j],b[j]=b[j+1],b[j+1]=t;
}
}
接着我们需要统计个数,最终得到的就是我们本道题的答案
t=b[0];
count=1;
for(int i=1;i<n;i++){
if(t<=a[i]){
count++;
t=b[i];
}
}
我们将电视剧结束的最早的时间赋为t,计数从1开始,因为b[0]算一个数
进行遍历,要求上一个电视剧结束的时间小于或者等于下一个电视剧开始的时间,如果满足个数就进行+1,否则继续循环,不计数。
将t赋值为排序后第二个电视剧结束的时间,再次进行比较,最终得到结果。
附上完整代码
#include <stdio.h>
int main(){
int n,a[100],b[100],t,count;
while(scanf("%d",&n)!=EOF&&n!=0){
for(int i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
for(int i=0;i<n-1;i++)
for(int j=0;j<n-1-i;j++){
if(b[j]>b[j+1]){
t=a[j],a[j]=a[j+1],a[j+1]=t;
t=b[j],b[j]=b[j+1],b[j+1]=t;
}
}
t=b[0];
count=1;
for(int i=1;i<n;i++){
if(t<=a[i]){
count++;
t=b[i];
}
}
printf("%d",count);
}
return 0;
}
代码到现在就写完了,大家是不是已经懂了呐!如果有更好的方法也可以进行评论交流
希望大家可以喜欢