##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(); } } }运行结果:
其他写法可附,或留言
END