##Problem A: 追星族
Description
小明最近迷上很多的女明星,恰逢她们正在巡回演出,得知所有的演出安排后,小明计划去看演出。但是有一些演出的时间重合,他在这个时间只能选择看其中一场演出,小明想尽可能多的看一些完整的演出,请你想想办法小明怎么安排能看更多完整的演出。
输入
输入数据有多组,每组数据的第一行有一个整数n(n≤100),表示演出的总数,然后是n行数据,每行包括两个数据si,ti (1≤i≤n),分别表示第i场演出的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
Output
对于每组输入数据,输出小明最多能看完整演出的场数,每个输出占一行。
Sample Input Copy
11
3 5
1 4
5 7
0 6
5 9
3 8
6 10
8 11
2 13
8 12
12 14
0
Sample Output Copy
4
可能的源代码如下:
自己写的二维数组:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int n=sc.nextInt();
if(n<0)
break;
int [][] c=new int [n][2];
for(int i=0;i<n;i++)
{
c[i][0]=sc.nextInt();
c[i][1]=sc.nextInt();
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(c[j][1]>c[j+1][1])
{
int temp=c[j][1];
c[j][1]=c[j+1][1];
c[j+1][1]=temp;
temp=c[j][0];
c[j][0]=c[j+1][0];
c[j+1][0]=temp;
}
}
}
int num=1;
int a=c[0][1];
for(int i=1;i<n;i++)
{
if(c[i][0]>=a)
{
a=c[i][1];
num++;
}
}
System.out.print(num);
System.out.println();
}//while b
}
}
或者是:
一维数组:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int n=sc.nextInt();
if(n==0)
break;
int[] si=new int[n];
int[] ti=new int[n];
int i,j;
for( i=0;i<n;i++){
si[i]=sc.nextInt();
ti[i]=sc.nextInt();
}
int t ,s;
for(i=0;i<ti.length;i++){
for(j=i;j<ti.length;j++){
if(ti[i]>ti[j]){
t=ti[i];
ti[i]=ti[j];
ti[j]=t;
s=si[i];
si[i]=si[j];
si[j]=s;
}
}
}
int num=1;
int t1=ti[0];
for( i=1;i<ti.length;i++){
if(si[i]>=t1){
t1=ti[i];
num++;
}
}
System.out.print(num);
System.out.println();
}
}
}
运行结果:
其他写法可附,或留言
csEND