鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 132

[复制链接]
发表于 2018-1-4 19:06:25 | 显示全部楼层
想提个意见,觉得赚鱼币这个政策有点矛盾啊…大家都是什么也不会所以来学,那么像每日一问这种回答技术问题赚鱼币的活动就因为知识不足参加不了,反过来没有鱼币就听不了课,技术没长进,更赚不了鱼币sad
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 19:44:11 | 显示全部楼层
n = 1800
y = 1
r = 1
while n != 2100:
    while y != 13:
        while r != 32:
            if n*y*r == 319907:
                print(n,y,r)
                break
            else:
                r = r + 1
        y = y + 1
        r = 1
    n = n + 1
    y = 1

刚开始学。。。用最笨的遍历法答案是 1987 7 23

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 20:04:47 | 显示全部楼层
  1. # -*- coding:utf-8 -*-
  2. list_1 = range(1950,2017)
  3. list_2 = range(1,13)
  4. list_3 = range(1,32)
  5. for year in list_1:
  6.     for mon in list_2:
  7.         for day in list_3:
  8.             if year*mon*day==319907:
  9.                 print "%s年%s月%s号"%(year,mon,day)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 21:06:00 | 显示全部楼层
  1. for d in range(1,13):
  2.     for m in range(1,32):
  3.         y = 319907 / (d*m)
  4.         if y.is_integer() and len(str(int(y))) == 4:
  5.             print(y, d, m)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 21:09:56 | 显示全部楼层
for Y in range(1001,10000):
    for M in range(1,13):
        for D in range(1,32):
            z = 319907/Y/M/D
        
if z == 1:
    print('张三的生日是%d年%d月%d日.'%(Y,M,D))
else:
    print('你撒谎!!!')

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 21:36:27 | 显示全部楼层
  1. for i in range(1000,3000):
  2.     for j in range(1,13):
  3.         for k in range(1,32):
  4.             d=int(i*j*k)
  5.             if d==319907:
  6.                 print(i,j,k)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 22:00:59 | 显示全部楼层
1987年7月23日
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 22:48:39 | 显示全部楼层
  1. def month():
  2.     for i in range(319907//31//2018,13):
  3.         if 319907%i==0:
  4.             return i

  5. def day():
  6.     for j in range(319907//12//2018,31):
  7.         if (319907/month())%j==0:
  8.             return j

  9. year=319907/month()/day()
  10. print('小明的生日是:%d年,%d月,%d日' % (year, month(), day()))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 23:42:11 | 显示全部楼层
第一次回答问题,不知道是否可以不用程序解决
319907 拆分为两个数的乘积,尾数一定是1和7
试着除7 得到45701
45701拆分为两个数的乘积,尾数一定是1或者3,结果可能是11,21,31,13,23,由于45701不能被3整除,去掉21
剩下的简单除一下就知道了。45701/23=1987
得到的答案是1987年7月23
没有用程序实现是因为数字比较小,当然如果数字很大一定是要用程序实现的,不过还是会先考虑排除特殊情况,这样可以减少程序的运行时间。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 09:12:22 | 显示全部楼层
新手不会什么高级的技巧,写一个最笨的方法吧。
Lyear = []
for i in range(1111,9999):
    if str(i)[0:1] != '0' and str(i)[1:2] != '0' and str(i)[2:3] != '0' and str(i)[3:4] != '0':
        Lyear.append(i)
Lmonth = [1,2,3,4,5,6,7,8,9,11,12]
Lday = [x for x in range(1,32) if x!=10 and x!=20 and x!=30]
for year in Lyear:
    for month in Lmonth:
        for day in Lday:
            if year * month * day ==319907:
                print(year,month,day)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 10:54:26 | 显示全部楼层
for year in range(1000,2019):
    for yue in range(1,13):
        for day in range(1,32):
            if year*yue*day==319907:
                print('%d年%d月%d日'% (year,yue,day))
            else:
                pass

1987年7月23日

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 11:23:36 | 显示全部楼层
  1. for a in range(1900, 2018) :
  2.       for b in range(1, 13) :
  3.             for c in range(1, 32) :
  4.                   if a * b * c == 319907 :
  5.                         print(a, '年', b, '月', c, '日')
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 14:05:52 | 显示全部楼层
for i in range(1000,2019):
    for n in range(1,13):
        for day in range(1,32):
             if i*n*day==319907:
                 print(i,n,day)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 15:40:44 | 显示全部楼层
这样可以吗?
结果是   1987 7 23

print('今年是:')
now_year = int(input())
year1 = now_year + 1
print('年x月x日结果是:')
num = int(input())
min_md = num / now_year
max_md = 372
for month in range(13):
    for day in range(31):
        for year in range(999, year1):
            count = month * day * year
            if(num==count):
                print(year,month,day)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 17:18:30 | 显示全部楼层
  1. for i in range(1,13):
  2.         if 319907%i ==0:
  3.             for j in range(1,32):
  4.                 if 319907/i%j ==0 and 319907/i/j<2020:
  5.                     print("%s 年%s 月%s 日"%(int(319907/i/j),i,j))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 20:03:35 | 显示全部楼层
直接找,370次循环的样子,还是很快的,限制条件是年份4位数
  1. def fun(num):
  2.     return [(num // month // day, month, day) for month in range(1, 13)
  3.             for day in range(1, 32)
  4.             if not (num/month/day % 1) and (num/month/day)//10**4 < 1]
复制代码

不过可能会出现1992-2-31这种答案,想办法限制一下
  1. import datetime
  2. def fun2(num):
  3.     result = [(num // month // day, month, day) for month in range(1, 13)
  4.               for day in range(1, 32) if not (num/month/day % 1)]
  5.     for year, month, day in result:
  6.         if year // 10**4 < 1:
  7.             try:
  8.                 datetime.datetime(year, month, day)
  9.                 print('{}-{}-{}'.format(year, month, day))
  10.             except ValueError:
  11.                 continue
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 22:22:21 | 显示全部楼层
  1. for i in range(2017, 1000, -1):
  2.         for j in range(1, 13):
  3.                 for k in range(1, 32):
  4.                         if i * j * k == 319907:
  5.                                 print(i, j, k)
  6.                                 break
复制代码

结果:1987 7 23

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-6 08:47:14 | 显示全部楼层
  1. import time as t
  2. t.clock()
  3. for year in range(2018):
  4.     for month in range(13):
  5.         for date in range(32):
  6.             if year *month*date == 319907:
  7.                 flag = 1
  8.                 y = year
  9.                 m = month
  10.                 d = date
  11. try:
  12.     if flag == 1:
  13.         print('%d年%d月%d日'%(y,m,d))
  14. except NameError:
  15.     print('在限定的范围内找不到答案!')
复制代码

#1987年7月23日

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-6 15:45:58 | 显示全部楼层

for x in range(1,12):
    for y in range(1,31):
        if 319907%(x*y)==0:

            z=int(319907/(x*y))
            if z<2000:
                print("如果没猜错的话张三的生日是%s年%s月%s日"%(z,x,y))



评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-7 06:14:24 | 显示全部楼层
gg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表