2 回答
TA贡献1785条经验 获得超8个赞
我不是 100% 确定,但你知道从技术上讲,你从 1 开始 R、C 和 K,而 count 保持在 0,对吗?这是因为您在使用它们之前移动到下一个 int。
我会将代码调整如下,看看是否会产生更好的结果!
import java.util.Scanner;
class Chess {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int testCases;
testCases = input.nextInt();
while (testCases-- > 0 && testCases <= 512) {
int R, C, K, count = 0;
if (R >= 1 && R <= 8 && C <= 8 && C >= 1 && K <= 8 && K >= 1) {
for (double rowIndex = 1; rowIndex <= 8; rowIndex++) {
for (double columnIndex = 1; columnIndex <= 8; columnIndex++) {
if (Math.pow((rowIndex - R), 2) + Math.pow((columnIndex - C), 2) <= (2 * Math.pow(K, 2))) {
count++;
}
}
}
R = input.nextInt();
C = input.nextInt();
K = input.nextInt();
}
System.out.println(count);
}
}
}
TA贡献1780条经验 获得超5个赞
您检查新正方形有效性的公式不正确;它不应该涉及平方。如您所见,对于K = 3
,您的条件变为
(r' - r)² + (c' - c)² ≤ 2 × 3² = 18
,事实上,可以通过满足r' = r + 4
和c' = c
,因为 16 ≤ 18。但这意味着国王向上移动了四个方格!
相反,您可以在每个方向上重申您的状况:
国王可以上
k
台阶,但不能超过第 8排,所以国王可以到达的最上排是rmax = min(r + k, 8)
;同样,
rmin = max(r - k, 1)
;同样,
cmax = min(c + k, 8)
;同样,
cmin = max(c - k, 1)
。
然后,您可以简单地将答案计算为(rmax - rmin + 1) × (cmax - cmin + 1)
。这在直觉上是有意义的,因为有效区域应该是一个跨越行rmin
到rmax
和列cmin
到的矩形cmax
。
添加回答
举报