首页 > 试题广场 >

优雅的点

[编程题]优雅的点
  • 热度指数:36402 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。
例如:半径的平方如果为25
优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。

输入描述:
输入为一个整数,即为圆半径的平方,范围在32位int范围内。


输出描述:
输出为一个整数,即为优雅的点的个数
示例1

输入

25

输出

12
from math import sqrt
def nCouple(N):
    r=int(sqrt(N))
    count=0
    for i in range(r+1):
        j=sqrt(N-i**2)
        if j == int(j):
            if i==0 or j==0:
                count+=2
            else:
                count+=4
    return count
if __name__=='__main__':
    n=int(input())
    print(nCouple(n))
发表于 2021-04-03 15:18:17 回复(0)
try:
    while True:
        num = int(input())
        result = 0
        for i in range(1,int(num**0.5)+1):
            a = int((num-i*i)**0.5)
            if a*a+i*i == num:
                result += 4
        print(result)
except Exception:
    pass
编辑于 2018-11-14 11:04:11 回复(0)
R2 = int(input())
N = int(R2 ** 0.5)
num = 0
'''
for i in range(N+1):
    for j in range(N+1):
        if i ** 2 + j ** 2 == R2:
            if (i==0 and j!=0) or (i!=0 and j==0): 
                num += 2 
            elif i!=0 and j!=0:
                    num += 4 
            break
print(num)
'''
'''
您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为60.00%
'''



for i in range(N+1):
    for j in range(i,N+1):
        if i ** 2 + j ** 2 == R2:
            if i==0 and j!=0:
                num += 2 * 2
            elif i!=0 and j!=0:
                if i != j:
                    num += 4 * 2
                elif i == j:
                    num += 4
            break
print(num)

'''
您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为60.00%
'''

发表于 2018-10-07 20:59:57 回复(0)
import math
n = int(input())

def graceful_point(n):
    b = 0
    for i in range(-1*int(math.sqrt(n)), 0):
        if math.sqrt(n-i*i) % 1 == 0:
            b += 4
    return b

print(graceful_point(n))
非常简单的方法,循环的时候不要把等于0 的情况包含,即
range(-1*int(math.sqrt(n)), 0)
这样的话,等于0 的情况实际上4恰好融入其他情况中。
发表于 2018-09-08 09:51:22 回复(0)
#-*- coding:utf-8 -*-
#思路很直接,勾股定理的应用即可,当圆的半径为整数,也就是可以有(0,+-r)构成的时候,(0,+-r)和(+-r,0)共四种
#其余时候,类似于(+/-3, +/-4)就是四种,遍历
rr = input()
count = 0
if int(rr**0.5)**2 == rr:
    count += 4
end = rr**0.5 
if end != int(end): 
    #当圆的半径长不是整数的时候,比如说(1,2)的时候,rr为5,
    #如果取end=int(5**0.5),这样(2,1)就没被考虑到
    end += 1
end = int(end)
for i in range(1,end):
    j = (rr - i**2)**0.5
    if j == int(j):
        count += 4
print(count)


发表于 2018-08-06 16:24:38 回复(0)
n = int(input())
sum = 0
r = n**0.5
for i in range(1, int(r)+1):
    a = (n - i*i)**0.5
    if int(a) == a:
        sum = sum + 4
print(sum)

发表于 2018-07-10 15:42:09 回复(0)
r_2=int(input())
r=int(r_2**0.5)

if r==r_2**0.5:
    count=-2
else:count=0
for i in range(-r,r+1):
    if (r_2-i**2)**0.5==int((r_2-i**2)**0.5):
            count+=2
print(count)


发表于 2018-05-28 10:14:48 回复(0)

python solution:

from math import sqrt


def countGracePoint(number):
    squareSet = set()
    for i in range(int(sqrt(number)) + 1):
        squareSet.add(i ** 2)
    res = 0
    for i in range(int(sqrt(number)) + 1):
        if number - i ** 2 in squareSet:
            if i != 0 and number - i ** 2 != 0:
                res += 4
            else:
                res += 2
    return res


a = int(input())
print(countGracePoint(a))
发表于 2018-04-12 15:35:16 回复(1)
#coding:utf-8
import math

r2=int(input())
r=int(math.sqrt(r2))
if r<=0:
    print(0)
number0=0#有0的坐标组合
number1=0#无0的坐标组合
myset=set(range(0,r+1))#set查找只需O(1)时间,降低时间复杂度
for i in range(0,r+1):
    j=math.sqrt(r2-i**2)
    if j in myset:
        if not i or not j:#i、j任一为0
            number0+=1
        else:#i、j均不为0
            number1+=1
number=number0*2+number1*4#有0的组合分布在两个象限,无0的组合分布在4个象限
print(number)

发表于 2018-04-10 12:21:48 回复(0)
import math
n=input()
def Get_elegant_point_numbers(r2):
    r2 = float(r2)
    if r2 == 0 :
        return 0
    r = int(math.sqrt(r2))
    count=0
    if r == math.sqrt(r2) :
        count += 4
    res=[]
    for i in range(1,r):
        flag = math.sqrt(r2 - i**2)
        if int(flag) == flag :
            res.append(int(flag))
            res.append(i)
    return count+len(set(res))*4
print(Get_elegant_point_numbers(n))

编辑于 2018-03-26 15:01:02 回复(0)
#!/usr/bin/env python
import math

r_2 = input()
r_2 = float(r_2)
num = int(math.sqrt(r_2))
count_num = 0 
for i in range(1,num+1):
    j = int(math.sqrt(r_2-i*i))
    result = (i*i + j*j)
    if (result == r_2):
        count_num = count_num + 4
print(count_num)


发表于 2018-03-21 14:58:27 回复(0)
from math import sqrt
r_sqr = int(raw_input())
r = int(sqrt(r_sqr))
i= r+1
j = 0
count = 0
while j < r+1 and i>0:
    sub = i*i+j*j - r_sqr
    if sub < 0:
        j+=1
    elif sub > 0:
        i-=1
    else:
        count+=1
        j+=1
print(4*count)

发表于 2017-10-25 08:47:16 回复(0)
python:在半径 的范围内 寻找,如果 有一个 数字为 0则总数+2,否则加4,不知道为什么 提示 超时?
from math import sqrt

def nCouple(N):
    r=int(sqrt(N))
    count=0
    for i in range(r+1):
        j=sqrt(N-i**2)
        if j in range(r+1) :
            if i==0 or j==0:
                count+=2
            else:
                count+=4
    return count
if __name__=='__main__':
    n=int(input())
    print(nCouple(n))


编辑于 2017-10-20 16:46:52 回复(2)
# 只需要算1/4的个数即可,对于坐标轴上的点只需要加上一个零界点就可以保证全部包括
import math

rs = int(raw_input().strip())
times = 0
r = math.sqrt(rs)
x = 0
while (x < r):
    y = int(math.sqrt(rs - x*x))
    area = x*x + y*y
    if area == rs:
        times+=1
    x += 1

print times*4
编辑于 2017-03-23 17:31:14 回复(0)
def count(n):
 sum = 0
 s = int(pow(n,1.0/2.0))
 i = 0
 j = 0
 while(i<=s):
  j = int(pow(n-i*i,1.0/2.0))
  if i>j: break
  if (i*i+j*j)==n:
   if (i == 0) or (i==j):
    sum += 4
   else:
    sum += 8
  i+=1
 return sum
n = input()
print count(n)

发表于 2016-11-30 10:56:10 回复(0)
import math
R=raw_input('')
R=float(R)
r=math.sqrt(R)
r=int(r)
num=0

for x in range(r+1):
    y=math.sqrt(float(R-x*x))
    yu=y-round(y)
    if(yu==0):
        if(x==0 or y==0):
            num+=2
        else:
            num+=4

print num

发表于 2016-09-21 20:21:40 回复(0)