鱼C论坛

 找回密码
 立即注册
楼主: ooxx7788

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

[复制链接]
发表于 2017-5-17 20:48:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-23 08:53:35 From FishC Mobile | 显示全部楼层
我就来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 19:13:57 | 显示全部楼层
居然先想到暴力破解,以前学数学的时候绝对不是这样想问题的···
# 首先想到,可以暴力破解吗?想法很美啊,哈哈哈,就是大数效率低
def f_1(num):
    n = num
    for i in range(1,num+1):
        if '4' in str(i):
            n -= 1
    return n
要求效率那肯定有窍门嘛,试下按权重来处理咯
# 算不算是9进制?关键在当前数字>4 的就-1
def f_2(num):
    a = [int(i) for i in reversed(str(num))]
    output = 0
    for j in range(len(a)):
        if a[j] > 4:
            a[j] -= 1
        output += a[j]*9**j
    print(output)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 19:26:40 | 显示全部楼层
···  ···
答案那两个方法,见都没见过
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-20 15:16:13 | 显示全部楼层
a = input()
a = int(a)
b = 4
num = 0

while True:
    if a - b >= 0 :
        num += 1
        b += 10
    else :
        break

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

使用道具 举报

发表于 2017-9-20 15:24:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-5 08:36:17 | 显示全部楼层
开始以为只是各位变4时直接变成5,后来对照答案,excel一对照,原来是十位、百位变4都会跳到5,于是就不会做了。还要好好再想想。
wxid_mlhj1sszbna021_1512433933021_32.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-20 14:47:10 | 显示全部楼层
答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-15 14:27:10 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-1-15 14:37 编辑
def assert_equals(func, target, *args):
    if func == target:
        print('Success!')
    else:
        print('Fail!{0} not equals {1}'.format(func, target))
        print(*args)

def faulty_odometer(n):
    real = 0
    display = 0
    while True:
        real += 1
        display += 1
        s = ['5' if i == '4' else i for i in str(display)]
        display = int(''.join(s))
        if display == n:
            return real

assert_equals(faulty_odometer(13), 12)
assert_equals(faulty_odometer(15), 13)
assert_equals(faulty_odometer(55), 40)
assert_equals(faulty_odometer(2005), 1462)
assert_equals(faulty_odometer(1500), 1053)
assert_equals(faulty_odometer(999999), 531440) # display = 999999,要2.4秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-21 20:56:05 | 显示全部楼层
def real_show(num):
    real, show = 0, 0
    while show < num:
        real += 1
        show += 1
        if '4' in str(show):
            show = int(str(show).replace('4','5'))
    print(show,real)
real_show(999999)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-13 14:57:02 | 显示全部楼层
def fun(n):
   a = [i for i in range(n+1) if not('4' in str(i))]
   print("%d,%d" % (n,a.index(n)))

if __name__=="__main__":
    fun(999999)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 16:12:30 | 显示全部楼层
def faulty_odometer(number):
    real, show, delt = 0, number, 0
    lent = len(str(number))
    print(lent)
    for i in range(lent-1, 0, -1):
        k = 10 ** i
        j = number // k
      
        delt += j * (10 ** (i-1))
        number = number - j*k
        print("k%d, j%d, number%d,delt%d"%(k,j, number,delt))
    if number > 4:
        delt += 1
    real =  show - delt
    return show, real
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 13:33:15 | 显示全部楼层
改2#楼大佬的
def count(n):
  real, show = 0, 0
  while show < n:
    real += 1
    show += 1
    if '4' in str(show):
      show = str(show)
      show = show.replace('4','5')
      show = int(show)
  else:
    return real
   
print(count(999999))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 16:26:08 | 显示全部楼层
交个作业,测试结果还是正确的。
inp_num = input('please input the number:')
count = 0

for i in range(int(inp_num)):
    if i%10 != 4:
        count += 1
print(count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 16:35:10 | 显示全部楼层
jiazhiyu 发表于 2018-4-18 16:26
交个作业,测试结果还是正确的。
inp_num = input('please input the number:')
count = 0

不过数字比较大的时候,运行的好慢。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-2 23:01:28 | 显示全部楼层
貌似最后一个计算时间比较长
代码:
import test
def faulty_odometer(x):
    y = 0
    for i in range(x):
        i = str(i)
        if '4' not in i:
            y += 1
    return y
    
test.assert_equals(faulty_odometer(13), 12)
test.assert_equals(faulty_odometer(15), 13)
test.assert_equals(faulty_odometer(55), 40)
test.assert_equals(faulty_odometer(2005), 1462)
test.assert_equals(faulty_odometer(1500), 1053)
test.assert_equals(faulty_odometer(999999), 531440)
test.assert_equals(faulty_odometer(165826622), 69517865)

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

使用道具 举报

发表于 2018-7-19 13:05:06 | 显示全部楼层
思考中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 14:26:58 | 显示全部楼层
def real_kilometer(k):
    dif = 0
    n = 1
    while n<=k:
        init_n = str(n)
        if '4' in init_n:
            new_n = init_n.replace('4','5')
            dif+=int(new_n)-n
            n=int(new_n)
        else:
            n+=1
    return k -dif
能实现,就是跑最后一个数据的时候时间比较久。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-7 16:07:59 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-5 10:11:36 | 显示全部楼层
xie
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 05:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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