瓦蓝 发表于 2017-5-17 20:48:43

{:5_90:}{:5_91:}

qq809344774 发表于 2017-5-23 08:53:35

我就来看看

solomonxian 发表于 2017-6-26 19:13:57

居然先想到暴力破解,以前学数学的时候绝对不是这样想问题的···{:10_245:}
# 首先想到,可以暴力破解吗?想法很美啊,哈哈哈,就是大数效率低
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 =
    output = 0
    for j in range(len(a)):
      if a > 4:
            a -= 1
      output += a*9**j
    print(output)

solomonxian 发表于 2017-6-26 19:26:40

······
答案那两个方法,见都没见过{:10_257:}
学习了

renze 发表于 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)

2740710202 发表于 2017-9-20 15:24:01

shigure_takimi 发表于 2017-12-5 08:36:17

开始以为只是各位变4时直接变成5,后来对照答案,excel一对照,原来是十位、百位变4都会跳到5,于是就不会做了。还要好好再想想。

yyf900524 发表于 2017-12-20 14:47:10

答案

shigure_takimi 发表于 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秒

yjsx86 发表于 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)

瞬秒爆加速 发表于 2018-3-13 14:57:02

def fun(n):
   a =
   print("%d,%d" % (n,a.index(n)))

if __name__=="__main__":
    fun(999999)

新手潘包邮 发表于 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
      

大头目 发表于 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))

jiazhiyu 发表于 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)

jiazhiyu 发表于 2018-4-18 16:35:10

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


不过数字比较大的时候,运行的好慢。。。

萧丹夜 发表于 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!

小强工作室 发表于 2018-7-19 13:05:06

思考中

jrro452 发表于 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
能实现,就是跑最后一个数据的时候时间比较久。

咕咕鸡鸽鸽 发表于 2019-1-7 16:07:59

看看

3333332 发表于 2019-3-5 10:11:36

xie
页: 1 [2] 3
查看完整版本: Python: 每日一题 38