随笔- 177  文章- 0  评论- 0  阅读- 1475 
不要二
【题目解析】:
本题看起来很难,实际是一个中等难度的题。本题如果没记错,是一个往年网易的笔试题,大家可以看到大
厂的题的难度。
本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕,
一个坐标位置放了蛋糕,跟他欧几里得距离为 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   dapaige  阅读(4)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示