Python每天练习——小程序007

题目007_1:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析1:

假设该数为 x。

1、则:x + 100 = n^2, x + 100 + 168 = m^{2}

2、计算等式:m^{2}-n^{2}= (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,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 的所有数字循环计算即可。

 程序源代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for i in range(1,85):
    if 168 % i == 0:    #由于i * j = 168,则168肯定能整除i;
        j = 168 / i;    #由于i * j = 168,
        if  i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :   #关键要理解好这一行代码,
            m = (i + j) / 2
            n = (i - j) / 2
            x = n * n - 100
            print(x)

程序分析2:

设该数为x:x + 100 = n^2, n^2 + 168 = m^2。

设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。

解得n=84/k - k/2;由于n,k均为自然数,则nk>=1,故1<=k^2<168,故1<=k<=12。

 程序源代码:

for x in range(1, 13):
    n = 84/x -x/2
    if int(n) == n:
        x = n ** 2 - 100
        print(x)

程序分析3:

力求使用最简单易读的方法解决问题:

缺点耗时。

t = []
for m in range(168):
    for n in range(m):
        if m**2 - n**2 == 168:
            x = n**2 - 100
            t.append(x)
print('符合条件的整数有:',t )

程序分析4:

 import math
    for i in range(1000):
        x = math.sqrt(i+100)
        y = math.sqrt(i+100+168)
        if x%1==0 and y%1==0:
            print(i)

 

题目007_2:输入某年某月某日,判断这一天是这一年的第几天?

 程序分:1:

【个人备注】:知道python有时间元组这一概念,这道题完全不需要计算。

时间元组包含九个属性

tm_year 年

tm_mon 月(1~12)

tm_mday 日(1~31)

tm_hour 时(0~23)

tm_min 分(0~59)

tm_sec 秒(0~61, 60或61是闰秒)

tm_wday 星期(0~6, 0是周一)

tm_yday 第几天(1~366, 366是儒略历)

tm_isdst 夏令时(平时用不到)

Python time strptime()方法

 import time
    date = input('输入时间(例如2018-08-23):')
    st = time.strptime(date,'%Y-%m-%d') # 时间文本转化成时间元祖
    num = st.tm_yday
    print(num)

程序分析2:

以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天:

year=int(raw_input("年:\n"))
month=int(raw_input("月:\n"))
day=int(raw_input("日:\n"))
months1=[0,31,60,91,121,152,182,213,244,274,305,335,366] #闰年
months2=[0,31,59,90,120,151,181,212,243,273,304,334,365] #平年

if ((year%4==0)and(year%100!=0)) or((year%100==0)and(year%400==0)):
    Dth=months1[month-1]+day
else:
    Dth=months2[month-1]+day
print "是该年的第%d天"%Dth

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值