不要二
【题目解析】:
本题看起来很难,实际是一个中等难度的题。本题如果没记错,是一个往年网易的笔试题,大家可以看到大
厂的题的难度。
本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕,
一个坐标位置放了蛋糕,跟他欧几里得距离为
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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现