是圆的问题呢(洛谷P1652题题解,Java语言描述)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                是圆的问题呢(洛谷P1652题题解,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                前言
好久沒寫博客啦~~
前一段時間忙別的事,也給自己好好“放了個假”,準備開始新的旅程了!!!
那就先刷刷水題陶冶情操吧~~
題目要求
P1652題目鏈接
 
 
分析
看起來挺迷惑,實際上還挺簡單的。
我們這么來思考這個問題:
兩圓之間的位置關系有5種——內含、外離、相交、內切、外切。
 題目要求“不相交”,即不能有“相交”、“內切”、“外切”,所以只有“內含”、“外離”。
既然是任意曲線,且不能相交,那么我們一定可以有N條路徑,可以與指定點不位于其中的任何圓不相交。(這句話好好讀讀,比較hhhhh)這樣就可以求我們要求的“最少”。
據上分析,我們關注的焦點就是——指定點位于哪些圓內部。
但是,我們還要注意,如果兩個點同時位于同一個圓內,則可以不穿過這個圓。
這樣就有兩種情況啦:
所以就可以寫我們的算法啦。。。
所有數據讀進去,用數組就可以隨機訪問,且索引一一對應啦!!
AC代碼(Java語言描述)
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();int[] x_array = new int[num];int[] y_array = new int[num];int[] radius_array = new int[num];for (int i = 0; i < num; i++) {x_array[i] = scanner.nextInt();}for (int i = 0; i < num; i++) {y_array[i] = scanner.nextInt();}for (int i = 0; i < num; i++) {radius_array[i] = scanner.nextInt();}int x1 = scanner.nextInt(), y1 = scanner.nextInt(), x2 = scanner.nextInt(), y2 = scanner.nextInt();scanner.close();int counter = 0;for (int i = 0; i < num; i++) {if (Math.pow((x1 - x_array[i]), 2) + Math.pow(y1 - y_array[i], 2) <= Math.pow(radius_array[i], 2)) {if (!(Math.pow((x2 - x_array[i]), 2) + Math.pow(y2 - y_array[i], 2) <= Math.pow(radius_array[i], 2))) {counter++;}} else {if (Math.pow((x2 - x_array[i]), 2) + Math.pow(y2 - y_array[i], 2) <= Math.pow(radius_array[i], 2)) {counter++;}}}System.out.println(counter);} }祝大家新年快樂!!!
總結
以上是生活随笔為你收集整理的是圆的问题呢(洛谷P1652题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【算法分析与设计】汉诺塔问题
- 下一篇: 【算法分析与设计】计数排序
