题1:坐标求和

java
import java.util.*;
class Solution {
public long sumSelected(long[][] matrix, List<int[]> coords) {
long total = 0;
for (int[] opt : coords) {
total += matrix[opt[0]][opt[1]];
}
return total;
}
}
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
if(!sc.hasNextInt())
break;
int m = sc.nextInt();
if(!sc.hasNextInt())
break;
int n = sc.nextInt();
long[][] matrix = new long[m][n];
//注意这里不能用while 因为后面还有输入 直接进入死循环
// while(sc.hasNextInt()) {
// for (int i = 0; i < m; i++) {
// for (int j = 0; j < n; j++) {
// matrix[i][j] = sc.nextLong();
// }
// }
// }
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = sc.nextLong();
}
}
if(!sc.hasNextInt())
break;
int q = sc.nextInt();
List<int[]> list = new ArrayList<>(q);
while(sc.hasNextInt()) {
for (int i = 0; i < q; i++) {
int r = sc.nextInt();
int c = sc.nextInt();
list.add(new int[] {r, c});
}
}
System.out.println(solution.sumSelected(matrix, list));
}
sc.close();
}
题2:坐标移动
正则表达式好用!
- [abc] - 匹配 a、b 或 c 中的一个字母 测验。
- [a-z] - 匹配 a 到 z 中的一个字母 测验。
- [^abc] - 匹配除了 a、b 或 c 中的其他字母测验。
- {n} - 匹配 n 次 测验。
- {n,} - 匹配 n 次以上 测验。
- {m ,n} - 最少 m 次,最多 n 次匹配 测验。

java
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
//输入处理,并对字符进行分割
Scanner sc = new Scanner(System.in);
String[] in = sc.nextLine().split(";");
//设置坐标原始值
int x = 0;
int y = 0;
//对分割之后的每个字符进行处理
for (String s : in) {
//对字符进行匹配,因为最多两位数,所以就最少匹配1次,最多匹配2次
if (!s.matches("[WASD][0-9]{1,2}")) {
continue;
}
//截取数字部分并转换为整数
int step = Integer.valueOf(s.substring(1));
//对第一位字符进行方向匹配,并做对应的移动
switch (s.charAt(0)) {
case 'W':
y += step;
break;
case 'S':
y -= step;
break;
case 'A':
x -= step;
break;
case 'D':
x += step;
break;
}
}
//输出结果
System.out.println(x + "," + y);
//关闭scanner
sc.close();
}
}