杭电oj2037节目单 两种解法

AC代码

1、用了结构体和比较函数

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
struct t{
	int x;
	int y;
}num[200];
bool cmp(t u,t v){
	return u.y<v.y; 
}
int main(){
	int n;
	while(cin>>n){
		if(n==0)
		break;
		for(int i=1;i<=n;i++)
			cin>>num[i].x>>num[i].y;
			sort(num+1,num+1+n,cmp);
			int count=0;
			int last=1;
			for(int i=2;i<=n;i++){
				if(num[last].y<=num[i].x){
					last=i;
					count++;
				}
			}
			cout<<count+1<<endl;;
		
		
}
	return 0;
}

2、

#include<iostream>
using namespace std;
int main(){
	int n,t;
	int a[100],b[100];
	while(1){
		cin>>n;
		if(n==0)
		break;
		for(int i=1;i<=n;i++){
			cin>>a[i]>>b[i];
		}//输入 
	//用冒泡排序根据结束时间进行从小到大排序	
    for(int i=1;i<=n;i++){
	 for(int j=1;j<=n-i-1;j++){
	   if(b[j]>b[j+1]){
		  t=b[j];
		  b[j]=b[j+1];
	   	  b[j+1]=t;
		  t=a[j];
		  a[j]=a[j+1];
		  a[j+1]=t;	}
				
			}
		}
	//-----排序结束----- 
		int last=1;//last指向满足条件的位置 
		int count=0;
	for(int i=1;i<=n;i++){
		if(b[last]<=a[i])
		{
			last=i;
			count++;
		}
	}/*统计比结束时间晚的个数*/	
	/*int i=1;
	int j=1;
	int count=0;
	while(i<n){
		if(b[j]<=a[i]){
			j=i;
			count++;
		}
		else{
			i++
		}
	}while来实现查找*/
	
		cout<<count+1<<endl;
	}
	return 0;
} 

注:最后count加1 是因为还有最后一个节目,刚开始因为这个错了

发布了13 篇原创文章 · 获赞 0 · 访问量 201

猜你喜欢

转载自blog.csdn.net/weixin_45191675/article/details/104698659
今日推荐