请用java附有注释解决词此问题在一个有12行12列的方形的武林世界里武林世界的第一行的一列格子的坐标是1 1第一行第二列坐标是1 2……右下角的坐标为12 12。少林派弟子总是在同一列回不停地行走。先往下走走到头不能再走时就往上走再到头则又往下走武当派弟子总是在同一行来回不停地行走。先往右走走到头不能再走时就往左走再到头则又往右走峨嵋派弟子总是在右下-左上方向来回不停走先往右下方走走到头不能再走
import java.util.Scanner;
public class Main {
static Scanner scanner = new Scanner(System.in);
static final int ROW = 12;
static final int COLUMN = 12;
static final int[] SHAO_LIN_MOVE = {1, 1};
static final int[] WU_DANG_MOVE = {1, 0};
static final int[] E_MEI_MOVE = {1, 1};
static int[][] shaoLin = new int[ROW][3];
static int[][] wuDang = new int[COLUMN][3];
static int[][] eMei = new int[ROW + COLUMN - 1][3];
static int[] getShaoLinIndex(int x) {
return new int[]{x, 0};
}
static int[] getWuDangIndex(int y) {
return new int[]{0, y};
}
static int[] getEMeiIndex(int x, int y) {
return new int[]{x + y - 2, 0};
}
static int[] getNextPostion(int[] cur, int[] move) {
int[] next = new int[2];
next[0] = cur[0] + move[0];
next[1] = cur[1] + move[1];
return next;
}
static boolean isValidPosition(int[] pos) {
return pos[0] >= 0 && pos[0] < ROW && pos[1] >= 0 && pos[1] < COLUMN;
}
static boolean hasShaoLin(int x) {
for (int i = 0; i < ROW; i++) {
if (shaoLin[i][0] == 1 && shaoLin[i][1] == x) {
return true;
}
}
return false;
}
static boolean hasWuDang(int y) {
for (int i = 0; i < COLUMN; i++) {
if (wuDang[i][0] == 1 && wuDang[i][2] == y) {
return true;
}
}
return false;
}
static boolean hasEMei(int x, int y) {
int[] index = getEMeiIndex(x, y);
return eMei[index[0]][0] == 1;
}
static void fight(int[] a, int[] b) {
int aLife = a[2];
int bLife = b[2];
int aAttack = 0;
int bAttack = 0;
switch (a[0]) {
case 1:
aAttack = (int) ((0.5 * a[1] + 0.5 * a[2]) * (a[2] + 10) / 100);
break;
case 2:
aAttack = (int) ((0.8 * a[1] + 0.2 * a[2]) * (a[2] + 10) / 100);
break;
case 3:
aAttack = (int) ((0.2 * a[1] + 0.8 * a[2]) * (a[2] + 10) / 100);
break;
}
switch (b[0]) {
case 1:
bAttack = (int) ((0.5 * b[1] + 0.5 * b[2]) * (b[2] + 10) / 100);
break;
case 2:
bAttack = (int) ((0.8 * b[1] + 0.2 * b[2]) * (b[2] + 10) / 100);
break;
case 3:
bAttack = (int) ((0.2 * b[1] + 0.8 * b[2]) * (b[2] + 10) / 100);
break;
}
aLife -= bAttack;
bLife -= aAttack;
if (aLife <= 0) {
a[0] = 0;
a[1] = 0;
a[2] = 0;
} else {
a[2] = aLife;
}
if (bLife <= 0) {
b[0] = 0;
b[1] = 0;
b[2] = 0;
} else {
b[2] = bLife;
}
}
static void oneStep() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < 3; j++) {
shaoLin[i][j] = 0;
}
}
for (int i = 0; i < COLUMN; i++) {
for (int j = 0; j < 3; j++) {
wuDang[i][j] = 0;
}
}
for (int i = 0; i < ROW + COLUMN - 1; i++) {
for (int j = 0; j < 3; j++) {
eMei[i][j] = 0;
}
}
int n = scanner.nextInt();
for (int i = 0; i < n; i++) {
char type = scanner.next().charAt(0);
int x = scanner.nextInt() - 1;
int y = scanner.nextInt() - 1;
int l1 = scanner.nextInt();
int l2 = scanner.nextInt();
int l3 = scanner.nextInt();
if (type == 'S') {
shaoLin[x][0] = 1;
shaoLin[x][1] = y;
shaoLin[x][2] = l3;
} else if (type == 'W') {
wuDang[y][0] = 1;
wuDang[y][1] = l1;
wuDang[y][2] = l3;
} else if (type == 'E') {
eMei[getEMeiIndex(x, y)[0]][0] = 1;
eMei[getEMeiIndex(x, y)[0]][1] = l1;
eMei[getEMeiIndex(x, y)[0]][2] = l3;
}
}
boolean fighted = true;
while (fighted) {
fighted = false;
for (int i = 0; i < ROW; i++) {
if (shaoLin[i][0] == 1) {
int[] cur = getShaoLinIndex(shaoLin[i][1]);
int[] next = getNextPostion(cur, SHAO_LIN_MOVE);
while (isValidPosition(next)) {
if (hasWuDang(next[1]) || hasEMei(next[0] + 1, next[1] + 1)) {
fight(shaoLin[i], wuDang[next[1]]);
fighted = true;
break;
}
if (hasShaoLin(next[1])) {
break;
}
cur = next;
next = getNextPostion(cur, SHAO_LIN_MOVE);
}
while (isValidPosition(next)) {
if (hasWuDang(next[1]) || hasEMei(next[0] + 1, next[1] + 1)) {
fight(shaoLin[i], wuDang[next[1]]);
fighted = true;
break;
}
cur = next;
next = getNextPostion(cur, new int[]{-1, 1});
}
}
}
for (int i = 0; i < COLUMN; i++) {
if (wuDang[i][0] == 1) {
int[] cur = getWuDangIndex(wuDang[i][2]);
int[] next = getNextPostion(cur, WU_DANG_MOVE);
while (isValidPosition(next)) {
if (hasShaoLin(next[0]) || hasEMei(next[0] + 1, next[1] + 1)) {
fight(wuDang[i], shaoLin[next[0]]);
fighted = true;
break;
}
if (hasWuDang(next[1])) {
break;
}
cur = next;
next = getNextPostion(cur, WU_DANG_MOVE);
}
while (isValidPosition(next)) {
if (hasShaoLin(next[0]) || hasEMei(next[0] + 1, next[1] + 1)) {
fight(wuDang[i], shaoLin[next[0]]);
fighted = true;
break;
}
cur = next;
next = getNextPostion(cur, new int[]{1, -1});
}
}
}
for (int i = 0; i < ROW + COLUMN - 1; i++) {
if (eMei[i][0] == 1) {
int[] cur = getEMeiIndex(i, 0);
int[] next = getNextPostion(cur, E_MEI_MOVE);
while (isValidPosition(next)) {
if (hasShaoLin(next[0]) || hasWuDang(next[1]) || hasEMei(next[0] + 1, next[1] + 1)) {
if (hasShaoLin(next[0])) {
fight(eMei[i], shaoLin[next[0]]);
}
if (hasWuDang(next[1])) {
fight(eMei[i], wuDang[next[1]]);
}
if (hasEMei(next[0] + 1, next[1] + 1)) {
fight(eMei[i], eMei[getEMeiIndex(next[0] + 1, next[1] + 1)[0]]);
}
fighted = true;
break;
}
cur = next;
next = getNextPostion(cur, E_MEI_MOVE);
}
while (isValidPosition(next)) {
if (hasShaoLin(next[0]) || hasWuDang(next[1]) || hasEMei(next[0] + 1, next[1] + 1)) {
if (hasShaoLin(next[0])) {
fight(eMei[i], shaoLin[next[0]]);
}
if (hasWuDang(next[1])) {
fight(eMei[i], wuDang[next[1]]);
}
if (hasEMei(next[0] + 1, next[1] + 1)) {
fight(eMei[i], eMei[getEMeiIndex(next[0] + 1, next[1] + 1)[0]]);
}
fighted = true;
break;
}
cur = next;
next = getNextPostion(cur, new int[]{-1, 1});
}
}
}
}
int[] res = new int[3];
for (int i = 0; i < ROW; i++) {
if (shaoLin[i][0] == 1) {
res[0]++;
res[1] += shaoLin[i][2];
}
}
System.out.println(res[0] + " " + res[1]);
for (int i = 0; i < COLUMN; i++) {
if (wuDang[i][0] == 1) {
res[0]++;
res[1] += wuDang[i][2];
}
}
System.out.println(res[0] + " " + res[1]);
for (int i = 0; i < ROW + COLUMN - 1; i++) {
if (eMei[i][0] == 1) {
res[0]++;
res[1] += eMei[i][2];
}
}
System.out.println(res[0] + " " + res[1]);
System.out.println("***");
}
public static void main(String[] args)
原文地址: http://www.cveoy.top/t/topic/ea1J 著作权归作者所有。请勿转载和采集!