第九届蓝桥杯java B组—第二题方格计数(详细介绍)


最近正在练习蓝桥杯的习题,做到第九届篮球杯的第二题(方格计数)的时候,发现没有思路,就上网上查了一些资料,感觉说的不够详细,可能也是大佬们都已经懂了,有些东西没必要说,今天小编在这里讲解一下自己的思路:

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

如果还有哪些地方不理解的话,请在评论区留言,或者是有更简单的方法的话也可以分享一下

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁同学与Android

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值