最近正在练习蓝桥杯的习题,做到第九届篮球杯的第二题(方格计数)的时候,发现没有思路,就上网上查了一些资料,感觉说的不够详细,可能也是大佬们都已经懂了,有些东西没必要说,今天小编在这里讲解一下自己的思路:
1.题目如下
如图p1.png所示,在二维平面上有无数个1x1的小方格。
我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。 你能计算出这个圆里有多少个完整的小方格吗? 注意:需要提交的是一个整数,不要填写任何多余内容。
2.解题思路
我们只看第一象限,圆心为坐标原点,一共四个象限,计算出一个象限的所有完整方格×4即可、在第一象限里面,以x轴递增的是i,以y轴递增的是j,我们找一个离圆点最近的小正方形(1×1)为例,利用勾股定理:对角线²=长²+宽²,可知道对角线长度的平方,那我们就可以利用每个正方形或者长方形从圆点到右上角距离(就是对角线)的平方跟1000×1000(r²)相比就行,只要比r²小的或者等于r²的,就是在范围之内了
3.详细讲解
如下如所示:
我们紫色区域的半径为3的正方形,以x轴递增的是i,以y轴递增的是j,两个长方形所在的黄线他们的长度的平方分别为,短黄线:2²+1²=5,长黄线:3²+2²=13。再跟r²=3²=9相比较5<9,13>9,即长黄线不在范围内,短黄线在范围之内。
4.代码实例
public class Lanqiao {
public static void main(String[] args) {
//这里定义一个计数器count,用来记录最终结果
int count = 0;
//题目要求的半径为1000的圆
int rr = 1000*1000;
//这里的1就代表第一个方格以此类推1000就代表第1000个方格
for(int i=1;i<=1000;i++) {
for(int j = 1;j <= 1000;j++) {
//根据解题思路即可得到以下条件
if(i*i + j*j <= rr) {
count++;
}
}
System.out.println(count*4);
}
}
}
5.答案
3137548
如果还有哪些地方不理解的话,请在评论区留言,或者是有更简单的方法的话也可以分享一下