算法系列之第九届蓝桥杯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

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

小伙伴们思考一下~

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浪潮之巅的小萝卜头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值