不要二
【题目解析】:
本题看起来很难,实际是一个中等难度的题。本题如果没记错,是一个往年网易的笔试题,大家可以看到大
厂的题的难度。
本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕,
一个坐标位置放了蛋糕,跟他欧几里得距离为
2
的位置不能放蛋糕,这个就是关键点。对于两个格子坐标
(x1,y1),(x2,y2)
的欧几里得距离为
: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) )
的算术平方根 。
也就是说:
如果
(x1,y1)
放了蛋糕,则满足
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4
的
(x2,y2)
不能放蛋
糕。
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4
看起来是一个无解的表达式。
但是可以进行加法表达式分解:
1+3=4
3+1=4
2+2=4
0+4=4
4+0=4
仔细分析前三个表达式是不可能的,因为
(x1-x2) * (x1-x2)
表达式结果不能等于
2
或
3
。
也就是说
( (x1-x2) * (x1-x2)
和
(y1-y2) * (y1-y2) )
两个表达式一个等于
0
,一个等于
4.
可以看出:假设放蛋糕的位置是
(x1,y1)
,则不能放蛋糕的位置
(x2,y2)
,满足
x1==x2,y1-y2==2
或者
x1-
x2==2,y1==y2.
【解题思路】:
仔细读理解了上面的题目解读,本题就非常简单了,定义一个二维数组,
resize
开空间并初始化,每个位置
初始化为
0
,表示当蛋糕,
a[i][j]
位置放蛋糕,则可以标记处
a[i][j+2]
和
a[i+1][j]
位置不能放蛋糕,遍历一遍二
维数组,标记处不能放蛋糕的位置,统计也就统计出了当蛋糕的位置数。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int col = in.nextInt();
int row = in.nextInt();
int count = 0;
int[][] array = new int[row][col];
for(int i = 0;i < row;i++) {
for(int j = 0;j < col;j++) {
if(array[i][j] == 0) {
count++;
if(i+2 < row) {
array[i+2][j] = 1;
}
if(j+2 < col) {
array[i][j+2] = 1;
}
}
}
}
System.out.println(count);
}
}
posted on
浙公网安备 33010602011771号