天天看點

網易2017秋招程式設計題:優雅的點 [python]

'''

[程式設計題] 優雅的點

時間限制:1秒

空間限制:32768K

小易有一個圓心在坐标原點的圓,小易知道圓的半徑的平方。小易認為在圓上的點而且橫縱坐标都是整數的點是優雅的,

小易現在想尋找一個算法計算出優雅的點的個數,請你來幫幫他。

例如:半徑的平方如果為25

優雅的點就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12個點。 

輸入描述:

輸入為一個整數,即為圓半徑的平方,範圍在32位int範圍内。

輸出描述:

輸出為一個整數,即為優雅的點的個數

輸入例子1:

25

輸出例子1:

12

'''

'''

解題思路:仔細小心

   思路不難,如何最高效率的算出所有優雅的點不遺落不重複是難點

   将半徑的平方和整除2并開發作為搜尋的範圍

   從0開始周遊範圍内的所有整數,把這個整數作為x坐标,利用半徑平方和求出y的坐标判斷其是否為整數

   若為整數則該x和y構成的點是優雅的,放入results清單

   周遊完成後,開始周遊results清單,利用圓的對稱性:

   如果裡面記錄的點中xy坐标有一個是0,則計數+4,若xy坐标相等,計數加4,否則計數+8

   輸出計數

'''

'''

代碼運作結果:

答案正确:恭喜!您送出的程式通過了所有的測試用例

'''

import math

r_square = int(input())

cord_range = int(math.sqrt(r_square//2))
results = []
for x in range(cord_range+1):
    y = math.sqrt(r_square - x ** 2)
    if y == int(y):
        results.append((x, y))
count = 0
for each in results:
    if each[0] == 0 or each[1] == 0:
        count += 4
    elif each[0] == each[1]:
        count += 4
    else:
        count += 8

print(count)