题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
StringBuffer ab = new StringBuffer();//输出结果
String a;
String[] ans = new String[8];//存放最后8条
char[] chs;
char[][] way = new char[100][16];//存放路径
int i, j, k = 0;
int[] ls = new int[100];//存放行号
int[] num = new int[100];//存放数目
boolean b;
try {
while ((a = r.readLine()) != null && !a.isEmpty()) {
chs = a.toCharArray();
i = chs.length - 1;
j = 15;
b = false;
while (i >= 0) {//逆序遍历,获得路径
if (chs[i] == ' ') {
b = true;
i--;
continue;
}
if (chs[i] == '\\') break;
if (j == -1) break;
if (b) way[k][j--] = chs[i];
i--;
}
i = 0;
b = false;
while (i < chs.length) {//顺序遍历,获得行号
if (chs[i] == ' ') {
b = true;
i++;
continue;
}
if (b) {
ls[k] *= 10;
ls[k] += chs[i] - '0';
}
i++;
}
num[k] = 1;//记录数为1
k++;//记录+1
}
} catch (IOException e) {
throw new RuntimeException(e);
}
i = 0;
while (i < 99) {
if (way[i][15] == '\u0000') {
i++;
continue;
}
j = i + 1;
while (j < 100) {
if (way[j][15] == '\u0000') {
j++;
continue;
}
k = 0;
while (k < 16) {
if (way[i][k] != way[j][k]) break;
k++;
}
if (k == 16 && ls[i] == ls[j]) {//路径相等且行号相等
num[i]++;//数目+1
way[j][15] = '\u0000';//最后一个字符置为空,以示标记
}
j++;
}
i++;
}
i = 99;
j = 0;
while (i >= 0) {//逆序遍历获得最后8条
if (way[i][15] == '\u0000') {
i--;
continue;
}
if (j == 8) break;
k = 0;
ab.setLength(0);
while (k < 16) {
if (way[i][k] != '\u0000') ab.append(way[i][k]);
k++;
}
ab.append(" ");
ab.append(ls[i]);
ab.append(" ");
ab.append(num[i]);
ans[j++] = ab.toString();//将结果字符串放入字符串数组
i--;
}
i = 7;
ab.setLength(0);
while (i >= 0) {
if (ans[i] == null || ans[i].isEmpty()) {
i--;
continue;
}
ab.append(ans[i]);
ab.append("\n");
i--;
}
System.out.print(ab);//打印输出
}
}
查看9道真题和解析