算法系列之第九届蓝桥杯java B组第二题方格记数
第二题:方格记数
题目:如图p1.png所示,在二维平面上有无数个1x1的小方格。
我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。 你能计算出这个圆里有多少个完整的小方格吗?
注意:需要提交的是一个整数,不要填写任何多余内容。
思路:
其实相对来说比较简单,将圆以原点为中心分为四个象限,每个象限圆圈内的方格数都是一样的
所以只需要找一个象限为参照,然后*4即圆内所有的方格数。
第一象限:只要这个格子的右上角的坐标与圆心的距离小于圆的半径,就说明这个格子在这个圆内。
(关于右上角的坐标与圆心的距离等于半径的情况,由于线条比较粗,那很微小的相交可以忽略不计~)
代码实现:
package 第九届蓝桥杯;
public class 第二题方格计数 {
public static int count=0;
public static void main(String[] args) {
int r=1000;
//调用函数进行方格的计数
RectCount(r,0,0);
}
public static void RectCount(int r,int dr,int dc){
//因为对称,只计算一个象限就行,之后进行*4
//以第一象限为例,一定要注意是右上角,所以加1
for(int i=dr+1;i<=r;i++){
for(int j=dc+1;j<=r;j++){
double distance = Math.sqrt(i*i+j*j);
if(distance<=r){
count++;
}
}
}
System.out.println(count*4);
}
}
通过数据进行检验:
r=1时 输出:0
r=2时 输出:4
r=3时 输出:16
r=4时 输出:32
r=5时 输出:60
... ... ...
r=1000 输出:3137548
结语:
这是我自己想到的方法,答案跟小伙伴们的一样吗?小伙伴们有没有更好地方法呢~
评论区等着你们哦~
明天的题:
第三题:复数幂
题目:设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。 求 (2+3i)^123456 等于多少?
即(2+3i)的123456次幂,这个数字很大,要求精确表示。答案写成 "实部±虚部i"
的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i
注意:需要提交的是一个很庞大的复数,不要填写任何多余内容。
小伙伴们思考一下~