题目链接:https://www.nowcoder.com/questionTerminal/1183548cd48446b38da501e58d5944eb
题目描述:
二货小易有一个W*H的网格盒子,网格的行编号为0~ H-1,网格的列编号为0 ~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
解题思路:
这道题首先可以画图来帮助理解。如下图:
由图可以看出:从(0,0)位置开始前四个位置放好蛋糕后,每隔两个格子就可以放蛋糕,于是可以利用二维数组来做题,在遍历前四个格子的时候将他们周围的四个格子的值置为-1,然后再遍历之后的格子,将可以放蛋糕的位置的值置为0。因此只需统计格子值为0的数量就是题解答案。
代码如下:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int row = sc.nextInt();
int col = sc.nextInt();
int[][] arr = new int[col][row];
int count = 0;
for(int i = 0; i < col; i++){
for(int j = 0; j < row; j++){
if(arr[i][j] == 0){
count++;
if(i + 2 < col){
arr[i+2][j] = -1;
}
if(j + 2 < row){
arr[i][j + 2] = -1;
}
}
}
}
System.out.println(count);
}
}
}