每天学一点,形成一种知识复利
问题3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:从问题中我们这知道,这题的重点就是“完全平方数”。先了解下什么是完全平方数。
完全平方数:若一个数能表示成某一个整数的平方的形式,则称这个数为完全平方数。
将问题数学化,设一个整数为x,加上100后的完全平方数为m的平方,加上168的完全平方数为n的平方,求出这个x。
要获得m和n,我们就知道math里的开方函数sqrt
所以m = int(math.sqrt(x + 100)) n = int(math.sqrt(x + 100 +168))
另外再通过完全平方数去做判断,所以m * m == x + 100 并且 n * n == x + 100 +168
假设这个整数的范围是50000,我就可以通过循环在50000里找出x;
demoCode:
import math
def getSpecialNum():
for x in range(50000):
m = int(math.sqrt(x + 100))
n = int(math.sqrt(x + 100 + 168))
if (m * m == x + 100) and (n * n == x + 100 + 168):
print("number:",x)
getSpecialNum()
问题4:输入某年某月某日,判断这一天是这一年的第几天?
分析:输入等于input()函数,某年某月某日分3段输入,分别输入year,month,day
涉及年的判断,就要判断该年是否为闰年;所以如果是闰年,并且月份大于3月时需要多加一天。
demoCode:
#! /usr/bin/python3
year = int(input("year:\n"))
month = int(input("month:\n"))
day = int(input("day:\n"))
def whichDay(year, month, day):
month_days = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
month_each = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31]
if year < 0:
print("year input error!")
return 0
if 0 < month and month < 13:
which_day = month_days[month - 1]
else:
print("month input error!")
return 0
if (year % 400 == 0) or ((year % 4 ==0) and (year % 100 != 0)):
if (month == 2):
if (day < 0) or (day - 1 > month_each[month - 1]):
print("day input error!")
return 0
elif (day < 0) or (day > month_each[month - 1]):
print("day input error!")
return 0
else:
if (day < 0) or (day > month_each[month - 1]):
print("day input error!")
return 0
add_oneday = 0
if (year % 400 == 0) or ((year % 4 ==0) and (year % 100 != 0)):
add_oneday = 1
if (add_oneday == 1 ) and (month > 2):
which_day += 1
which_day += day
return which_day
ret = whichDay(year, month, day)
if(ret == 0):
print("input error!!!")
else:
print("The day is %dth day." % ret)