题目描述
智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机Ap防沉迷系统” 能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。
1、在一天24小时内,可注册每个App的允许使时段;
2、一个时间段只能使用一个APP, 不能在同时注册App2 和 App3;
3、App有优先级,数值越高,优先级越高。注册使用时段时,如果高优先级的App时间和低优先级的时段有冲突,则系统会自动注销低优先级的时段;
如果App的优先级相同,则后添加的App不能注册。
请编程实现,根据输入数据注册App,并根据输入的时间点,返回时间点注册的App名称,如果该时间点没有注册任何App,请返回字符串“NA"。
输入描述
第一行表示注册的App数N (N≤100)(N≤100)
第二部分包括N 行,每行表示一条App注册数据
最后一行输入一个时间点,程序即返回注册点可App
2
App1 1 09:00 10:00
App2 2 11:00 11:30
09:30
数据说明如下 1、N行注册数据以空格分隔,四项数依次表示: App名称、优先级、起始时间,结束时间 2.优先级1-5,数字值越大,优先级越高 3、时间格式HH:MM,小时和分钟都是两位,不足两位前面补0 4.起始时间需小于结束时间,否则注册不上 5.注册信息中的时间段包含起始时间点,不包含结束时间点
输出描述
输出一个字符串,表示App名称,或NA表示空闲时间。
示例1
输入:
1
App1 1 09:00 10:00
09:30
输出:
App1
说明:
App1注册在9点到10点间,9点半可用的应用名是App1
示例2
输入:
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
输出:
App2
说明:
ApP1和App2的时段有冲突,App2优先级高,注册App2之后,App1自动注销,因此输出App2
示例3
输入:
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50
输出:
NA
package odTest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
class App{
private String name;
private int priority;
private Date startTime;
private Date endTime;
public App() {
}
public App(String name, int priority, Date startTime, Date endTime) {
super();
this.name = name;
this.priority = priority;
this.startTime = startTime;
this.endTime = endTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
}
public class phoneApp {
public static void main(String[] args) throws ParseException {
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
List<App> appList = new ArrayList<>();
SimpleDateFormat formate = new SimpleDateFormat("HH:mm");
for(int i=0;i<num;i++) {
App app = new App();
String[] appContent = scanner.nextLine().split(" ");
app.setName(appContent[0]);
app.setPriority(Integer.parseInt(appContent[1]));
app.setStartTime(formate.parse(appContent[2]));
app.setEndTime(formate.parse(appContent[3]));
appList.add(app);
}
//自己先筛一遍,将时间重合的App筛掉
appList=selectPriorApp(appList);
Date objectTime = formate.parse(scanner.nextLine());
int maxlevel = 0;
for(App a:appList) {
if(a.getStartTime().compareTo(objectTime)<=0&&a.getEndTime().compareTo(objectTime)>=0) {
System.out.println(a.getName());
break;
}
maxlevel++;
}
if(maxlevel==appList.size()) {
System.out.println("NA");
}
}
private static List<App> selectPriorApp(List<App> apps) {
List<App> appList = new ArrayList<>();
App app = new App();
for(int i=0;i<apps.size();i++) {
app = apps.get(i);
for(int j=i+1;j<apps.size();j++) {
Date limitStartTime = apps.get(i).getStartTime();
Date limitEndTime = apps.get(i).getEndTime();
Date StartTime = apps.get(j).getStartTime();
Date EndTime = apps.get(j).getEndTime();
//只要在这范围内,就需要考虑优先级
if((limitStartTime.compareTo(StartTime)<=0 && limitEndTime.compareTo(StartTime)>=0)||
(limitStartTime.compareTo(EndTime)<=0 && limitEndTime.compareTo(EndTime)>=0)) {
if(apps.get(i).getPriority()>apps.get(j).getPriority()) {
continue;
}else {
app = apps.get(j);
}
}
}
appList.add(app);
}
return appList;
}
}