瓦蓝
发表于 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