第一题:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间限制:C/C++ 语言 2000 MS; 其他语言 4000MS

内存限制:C/C++ 语言 65536KB; 其他语言 589824KB

题目描述:

小A在某公司上班,公司包含的部门比较多,请根据已知的数据对应关系把他们的公司部门对应关系列出来。

举例说明:

比如公司部门的数据对应关系如下,已按照部门层级排序:

ID 名称 上级部门ID

1 公司A 0

2 人力资源部 1

3 薪酬福利部 2

4 招聘部 2

列出部门的关系如下:

公司A---人力资源部---薪酬福利管理部门; 公司A---人力资源部门---招聘部

输入

1,A,0;2,B,1;3,C,2;4,D,2

1,A,0分别表示部门ID、部门名称、上级部门ID;第一层级部门ID固定为1,上级部门ID为0,且只有一个根部门;部门数据之间使用分号分隔;部门ID和上级部门ID关联正确

要求至少输入三个部门。

incorrect data”

输出

A-B-C;A-B-D

样例输入

1,A,0;2,B,1;3,C,1
1,A,0;B,1,2;
1,A,0;2,B,1;3,C,2;4,D,2
2,A,0;1,B,1;3,C,2

样例输出

A-B;A-C

incorrect data

A-B-C;A-B-D

incorrect data

应该是我算法能力还太弱,后面的逻辑实在没思路,暂且放着,以后来处理

public class Main {
// 一行字符串:1,A,0;2,B,1;3,C,2;4,D,2
//
// 1,A,0分别表示部门ID、部门名称、上级部门ID;第一层级部门ID固定为1,上级部门ID为0,且只有1个根部门;部门数据之间使用分号分隔;部门ID和上级部门ID关联正确
//
// 要求至少输入三个部门。
//
// 如输入条件不满足,则输出“incorrect data”
 public char [][] stringParse(String stringArray) {
// String stringArray = "1,A,2;3,B,5;6,C,8";
 String[] spiltString = stringArray.split(";");
 char [][] charArray = new char[spiltString.length][];
 for (int i =0; i<spiltString.length; i++) {
 String[] spiltStringComma = spiltString[i].toString().split(",");
 charArray [i] = new char[spiltStringComma.length];
 for (int j =0; j<spiltStringComma.length; j++) { 
 charArray [i][j] = (spiltStringComma[j].toString()).charAt(0);
 }
 }
 return charArray;
 }
 public String choose(char [][] charArray) {
 String result = "incorrect data";
 StringBuffer resultString = new StringBuffer();

 for (int i =0; i < charArray.length; i++) {
 if (
 (charArray[i][0] < '0'|| charArray[i][0]> '9') 
 && (charArray[i][1] < 'A'|| charArray[i][1]> 'Z') 
 && (charArray[i][2] < '0'|| charArray[i][2]> '9')) {
 return result;
 } 
 for (int j = 0; j <charArray[i].length; j++) {
 if (charArray[i][j] < charArray[i][j+1]) {
 if (j == charArray[i].length) {
 resultString.append(charArray[2][0]); 
 } else { 
 resultString.append(charArray[2][0]);
 resultString.append('-');
 }
 } else {
 return result;
 }
 }
 resultString.append(";"); }
 return resultString.toString();
 }
 public String judgeString(String stringArray) {
 StringBuffer result = new StringBuffer();
 for (int i = 0; i < stringArray.length(); i+=6) {
 if (
 (stringArray.charAt(i) >= '0' && stringArray.charAt(i) <= '9') //部们ID为数字
 && (stringArray.charAt(i+2) >= 'A' && stringArray.charAt(i+2) <= 'Z') //部门名称为字母
 && (stringArray.charAt(i+4) >= '0' && stringArray.charAt(i+4) <= '9') //上级部门ID为数字
 && (stringArray.charAt(i) != stringArray.charAt(i+4))
 && (stringArray.length() > 18)) { //要求至少输入三个部门。
 //再去比较部门
// for (int j = 4+i*6; j < stringArray.length()-i; j++) {
// if (stringArray.charAt(j) == stringArray.charAt(i)) {
// result.append(stringArray.charAt(j-1));
// result.replace(j, j+1, Character.toString((stringArray.charAt(4+i*6))));
// break;
// } else {
// result.replace(result.length()-3, result.length()-2, ";");
// }
// }
 continue;
 } else { 
 result = new StringBuffer("incorrect data");
 }
 }
 return result.toString();
 }
 public static void main (String[] args) {
 Main test = new Main(); 
 System.out.println(test.judgeString("1,A,0;2,B,1;3,C,1")); 
 System.out.println(test.judgeString("1,A,0;B,1,2;")); 
 System.out.println(test.judgeString("1,A,0;2,B,1;3,C,2;4,D,2")); 
 System.out.println(test.judgeString("2,A,0;1,B,1;3,C,2")); 
 }
}

第二题:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

公交行驶时间计算

时间限制:C/C++ 语言 1000 MS; 其他语言 3000MS

内存限制:C/C++ 语言 65536KB; 其他语言 589824KB

题目描述:

有一环形公交站,包含N(N>=3)个站点【站点序号:1...N】,每个站点停留5分钟,相邻两个站点之间行驶时间都是10分钟,循环行驶,已知第一圈第一个站点的进入时间为X,现在公交行驶时间为Y,请计算当前公交行驶的圈数,以及在哪个站点之间M-N【如果是停在某个站点Z,则输出Z-Z】。

输入

3,2017-07-25 06:00:00,2017-07-25 06:06:00

3,2017-07-25 06:00:00,2017-07-25 06:05:00【整数、时间字符串、时间精确到分钟】分别表示站点数,第一圈第一个站点的进入时间,目前时间;数据之间使用逗号分隔;

要求至少三个站点。

incorrect data”

输出

1;1-2

数据表示:公交正在行驶第一圈,在第一个站点和第二个站点之间;圈数与行驶站点时间使用分号分隔

1;2-2则表示公交正在行驶第一圈,目前停留在第二个站点

样例输入

3,2017-07-25 06:00:00,2017-07-25 06:40:00
3,2017-07-25 06:00:00,2017-07-25 08:45:00
1,2017-07-25 06:00:00,2017-07-25 06:40:00
3,2017-07-25 06:00:66,2017-07-25 06:40:09

样例输出

1;3-1
4;3-3
incorrect data
1;3-1
 
---------------------------------------------------------------------------------
 
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; 
public class BusTime {

 public static void main(String[] args) {
 Scanner s = new Scanner(System.in);
 String[] ss = s.nextLine().split(",");
// String[] ss = "3,2017-07-25 06:00:00,2017-07-25 06:40:00".split(",");
 int n = Integer.valueOf(ss[0]);

 Date date_start=null;
 Date date_end=null;

 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

 try {
 date_start = format.parse(ss[1]);
 date_end = format.parse(ss[2]);
 } catch (ParseException e) {
 e.printStackTrace();
 }

 long min = (date_end.getTime()-date_start.getTime())/(1000*60); //得到间隔的分钟数 
 if(n<3 || min<0){
 System.out.println("incorrect data");
 return;
 }

 long q_Num = min / (15 * n); //圈数

 long le_min = min % (15 * n); //q_Num圈之后剩余的分钟数
// System.out.println(le_min);

 long a = le_min / 15; //剩余多少分钟所走的战术
 long b = le_min % 15; //经过最后一个站点之后的剩余
// System.out.println(a +"***"+b);

 System.out.print((q_Num+1)+";");

 if(b>=0 && b<=5){
 System.out.println((a%n+1)+"-"+(a%n+1));
 }else{
 System.out.println((a%n+1)+"-"+(a%n+2)%n);
 }

 }

}