题目来源
小白打卡第二天,冲冲冲!
- 第一题
# 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
不知道这个数多大,设这个数为x,可以得到√(x+100)是一个整数,√(x+268)也是一个整数,就整个while循环,直到找出一个满足条件的数结束循环。
i = 1 while True: m = pow(i+100,0.5) n = pow(i+268,0.5) m_split = str(m).split('.') # 按照小数点进行分割 n_split = str(n).split('.') m_fractional = int(m_split[1]) # 取出小数部分 n_fractional = int(n_split[1]) if m_fractional == 0 and n_fractional == 0: print(i) break else: i += 1
找不到就一直找吧,哈哈
# 运行结果 21
之后看到答案,结果不止一个数,还包含负数,这我着实没有考虑到负数,尴尬了。。。
for i in range(-100,10000): try: m = pow(i+100, 0.5) n = pow(i+268, 0.5) m_split = str(m).split('.') # 按照小数点进行分割 n_split = str(n).split('.') m_fractional = int(m_split[1]) # 取出小数部分 n_fractional = int(n_split[1]) except: continue if m_fractional == 0 and n_fractional == 0: print(i)
看到答案后取个巧,稍微改一下,也能得到结果(战术后仰)
# 运行结果 -99 21 261 1581
最后附上答案的分析:
# 假设该数为 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 至少一个是偶数 # 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 的所有数字循环计算即可。
没有做过这种题我是绝对想不到这种解法的…长经验了又
# 答案源码 for i in range(1,85): if 168 % i == 0: j = 168 / i; 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月份的天数,之后就好做多了。
get_data = input('请输入 年.月.日。例如:2001.05.06') # 规定一个输入格式,之后就根据这个格式进行分割。 get_processed_data = get_data.split('.') # 对数据进行处理得到分别年月日 year = int(get_processed_data[0]) # 今夕是何年 month = int(get_processed_data[1]) # 今夕是何月 day = int(get_processed_data[2]) # 今夕是何日 # 然后整两个列表分别把闰年月份的天数和平年月份的天数存进去 month_days_0 = {1: 31, 2: 29, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31} # 闰年历 month_days_1 = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31} # 平年历 # 对之前切片获取的年数据进行判断,是否为闰年。 if year % 100 == 0: # 判断是否为整百年 if year % 400 == 0: count_year = '闰年' else: count_year = '平年' else: if year % 4 == 0: count_year = '闰年' else: count_year = '平年' days_add = 0 # 日的加总 for i in range(1, month): # 建立索引 if count_year == '闰年': days_add += month_days_0[i] # 如果闰年就从闰年字典中索引 if count_year == '平年': days_add += month_days_1[i] # 如果平年就从闰年字典中索引 days_add = days_add + day # 别忘记还有一个从输入中获取的日 print(f'今天是{year}年({count_year})的第{days_add}天')
差不多了,看看我们劳动的成果
# 运行结果 请输入 年.月.日。例如:2001.05.06 2005.06.03 今天是2005年(平年)的第154天
这种问题的话实现了需求就行(狗头),虽然和答案不一样,绝对不是我懒!!
第二日打卡结束!
即兴背诗——千淘万漉虽辛苦,吹尽狂沙始到金
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)