第一种方法:
#include<stdio.h>
#include<algorithm>
//using namespace std;
int main()
{
int n,m;
while(~scanf("%d",&n),n!=0)
{
int i,j,a[110],b[110],t,k,r,p;
for(i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(b[i]>b[i+1])
{
r=b[i];
b[i]=b[i+1];
b[i+1]=r;
p=a[i];
a[i]=a[i+1];
a[i+1]=p;//这三步刚开始时忘掉了,而答案是对的,找了好长时间。
}
//sort(b,b+n);
for(i=0,k=0,t=1;i<n;i++)
{
if(a[i]>=b[k])
{
t++;
k=i;
}
}
printf("%d\n",t);
}
return 0;
}
第二种方法:
利用结构体和贪心算法
#include<stdio.h>
#include<algorithm>
using namespace std;
struct stu
{
int a;
int b;
};
bool cmp(stu q,stu r)
{
return q.b<r.b;
}
int main()
{
struct stu s[110];
int n,m;
while(~scanf("%d",&n)&&n!=0)
{
int i,j,k,cout;
for(i=0;i<n;i++)
scanf("%d %d",&s[i].a,&s[i].b);
sort(s,s+n,cmp);
for(i=1,cout=1,k=0;i<n;i++)
if(s[i].a>=s[k].b)
{
cout++;
k=i;
}
printf("%d\n",cout);
}
return 0;
}