python基础教程100例题: 3&4

python基础教程100例题: 3&4,第1张

python基础教程100例题: 3&4

 一、题目:一个整数,它加上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)

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5572387.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存