VJ—今年暑假不AC

今天我来跟大家分享一个很有意思的题目,相信大家都会对这道题感兴趣
在这里插入图片描述首先呈现题目
在这里插入图片描述在这里插入图片描述让我们来分析一下题目,第一行输入总共喜欢看的电视剧个数,之后的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;
}

代码到现在就写完了,大家是不是已经懂了呐!如果有更好的方法也可以进行评论交流
希望大家可以喜欢
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值