第九届蓝桥杯java B组—第二题方格计数(详细介绍)
生活随笔
收集整理的這篇文章主要介紹了
第九届蓝桥杯java B组—第二题方格计数(详细介绍)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.題目如下
- 2.解題思路
- 3.詳細講解
- 4.代碼實例
- 5.答案
最近正在練習藍橋杯的習題,做到第九屆籃球杯的第二題(方格計數)的時候,發現沒有思路,就上網上查了一些資料,感覺說的不夠詳細,可能也是大佬們都已經懂了,有些東西沒必要說,今天小編在這里講解一下自己的思路:
1.題目如下
如圖p1.png所示,在二維平面上有無數個1x1的小方格。
我們以某個小方格的一個頂點為圓心畫一個半徑為1000的圓。 你能計算出這個圓里有多少個完整的小方格嗎? 注意:需要提交的是一個整數,不要填寫任何多余內容。
2.解題思路
我們只看第一象限,圓心為坐標原點,一共四個象限,計算出一個象限的所有完整方格×4即可、在第一象限里面,以x軸遞增的是i,以y軸遞增的是j,我們找一個離圓點最近的小正方形(1×1)為例,利用勾股定理:對角線2=長2+寬2,可知道對角線長度的平方,那我們就可以利用每個正方形或者長方形從圓點到右上角距離(就是對角線)的平方跟1000×1000(r2)相比就行,只要比r2小的或者等于r2的,就是在范圍之內了
3.詳細講解
如下如所示:
我們紫色區域的半徑為3的正方形,以x軸遞增的是i,以y軸遞增的是j,兩個長方形所在的黃線他們的長度的平方分別為,短黃線:22+12=5,長黃線:32+22=13。再跟r2=32=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
如果還有哪些地方不理解的話,請在評論區留言,或者是有更簡單的方法的話也可以分享一下
總結
以上是生活随笔為你收集整理的第九届蓝桥杯java B组—第二题方格计数(详细介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Arrays.sort()的几
- 下一篇: Java 大数类BigInteger与B