第九届蓝桥杯Java省赛B组

642 阅读2分钟

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

第九届蓝桥杯Java省赛B组——方格计数

题目描述

如图p1.png的图片所示,在二维平面上有无数个1x1大小的小方格。

我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。

你能计算出这个圆里有多少个完整的小方格吗? 

注意:需要提交的是一个整数,不要填写任何多余内容。

解题思路

我最开始有一个错误的想法...就是求出圆的面积然后再向下取整。

实际上这个结果算出来并不是完整小方格的个数,结果会比实际正确的答案少很多,因为这种做法求出来会认为两个半圆是一个圆。

后来查了一些别人的解析,这题还是很容易的......

这一题主要是要知道题目的大致意思,所求的圆内的方格需要是完整的方格而不是实际面积上有多少方格。所以只要理解了这一点,这题的算大就很简单了。

image.png 我们从圆心出建立直角坐标系。

只要判断这个点到圆心的距离是否小于圆的半径就能确定这个方格是否是完整的在这个圆中。

程序代码

package day_01;

public class 方格计数 {

	public static void main(String[] args) {
		/*
		 我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。
		 你能计算出这个圆里有多少个完整的小方格吗?
		 */

		int r=1000;
		int sum=0;
		
		for(int x=1;x<=r;x++) {
			for(int y=1;y<=r;y++) {
				if((x*x+y*y)<=r*r) {
					sum++;
				}
			}
		}
		
		System.out.print(sum*4);
	}

}

代码关键步骤

两个for循环,分别判断x轴与y轴的关系是否符合。

for(int x=1;x<=r;x++) {
			for(int y=1;y<=r;y++) {
				if((x*x+y*y)<=r*r) {
					sum++;
				}
			}
		}

image.png

结果演示

结果为:3137548

image.png