2 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不是 100% 確定,但你知道從技術(shù)上講,你從 1 開始 R、C 和 K,而 count 保持在 0,對嗎?這是因?yàn)槟谑褂盟鼈冎耙苿拥较乱粋€(gè) int。
我會將代碼調(diào)整如下,看看是否會產(chǎn)生更好的結(jié)果!
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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
您檢查新正方形有效性的公式不正確;它不應(yīng)該涉及平方。如您所見,對于K = 3
,您的條件變?yōu)?/p>
(r' - r)2 + (c' - c)2 ≤ 2 × 32 = 18
,事實(shí)上,可以通過滿足r' = r + 4
和c' = c
,因?yàn)?16 ≤ 18。但這意味著國王向上移動了四個(gè)方格!
相反,您可以在每個(gè)方向上重申您的狀況:
國王可以上
k
臺階,但不能超過第 8排,所以國王可以到達(dá)的最上排是rmax = min(r + k, 8)
;同樣,
rmin = max(r - k, 1)
;同樣,
cmax = min(c + k, 8)
;同樣,
cmin = max(c - k, 1)
。
然后,您可以簡單地將答案計(jì)算為(rmax - rmin + 1) × (cmax - cmin + 1)
。這在直覺上是有意義的,因?yàn)橛行^(qū)域應(yīng)該是一個(gè)跨越行rmin
到rmax
和列cmin
到的矩形cmax
。
添加回答
舉報(bào)