
一、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
例题来源——菜鸟教程
import math
for a in range(-100,10000):
if math.sqrt(a + 100) % 1 == 0:
if math.sqrt(a + 100 + 168) % 1 == 0:
print(a)
这是我的菜鸟方法,然后看了答案发现我的想法好低级,而且这样做有很多情况都是考虑不到的,但是也分享一下吧。筛选一定范围内的数字a,a+100和a+268之后再开根,余数为0的就是满足条件的数字。但这样做需要把a的范围考虑到,如果不知道答案可能会错失很多情况。下面分享一下答案的做法和思路:
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,因为i和j乘积是一个偶数,所以i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
因为已经有了i * j =168,其实我觉得答案的思路也就是找到 i 或者 j 的一个大致范围,然后在这个范围内不断重复直到找到满足这个条件的数字。
for i in range(2,85):
if (168 % i == 0) and (i%2 == 0):
j = 168 / i
if (i>j) and j % 2 == 0:
c = (i + j ) / 2
b = (i - j ) / 2
a = b*b - 100
print(a)
二、 题目:输入某年某月某日,判断这一天是这一年的第几天?
思路:关于这种问题最重要的就是有大月和小月,有平年和闰年,所以区分了这两种情况是最基本的思路。
我首先把月份分成三种情况:1. 1/3/5/7/9/10/12 月 2. 4/6/8/11 月 3. 2月
其次,2月又分为两种情况:平年有28天,闰年有29天
y = int(input("Year:"))
m = int(input("Month:"))
d = int(input("Date:"))
day = 0
for month in range(1,m):
if month in (1,3,5,7,8,10,12):
day += 31
if month in (4,6,9,11):
day += 30
if month == 2:
if (y%4==0 and y%100!=0) or y%400==0:
day += 29
else:
day += 28
day += d
print(day)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)