鱼C论坛

 找回密码
 立即注册
查看: 4917|回复: 67

[已解决]Python:每日一题 340

[复制链接]
发表于 2020-3-1 20:13:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


数字以 0123456789101112131415… 的格式序列化到一个字符序列中。在这个序列中,第 5 位(从下标 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。

给定一个非负整数 n,求数字序列中第 n 位的数。

示例 1:

输入:n = 3
输出:3
示例 2:

输入:n = 11
输出:0


欢迎大家一起答题!
最佳答案
2020-3-2 14:06:16
fan1993423 发表于 2020-3-2 00:15
输入96512好像有问题

多谢提醒,的确有bug,修改了一下

def f(n):
    return ((9*n-1)*(10**n)+10)/9
   
def get1(n,num):
    if f(n) > num :
        return n
    else:
        return get1(n+1,num)

def fun340():
    a = int(input())
    leve = get1(1,a)
    b = int(a - f(leve - 1))
    num = int(b/leve)
    l = int(leve-b%leve)

    m = pow(10,leve-1)+num
    end = int((m%pow(10,l))/pow(10,l-1))
    print(end)

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2020-3-1 20:23:28 | 显示全部楼层
难道两位数以上输出都是0吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 20:25:05 | 显示全部楼层
最后的魁拔 发表于 2020-3-1 20:23
难道两位数以上输出都是0吗?

不是,只是第 11 位恰好是 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 20:33:56 | 显示全部楼层
a = [0]
i = 1
while True:
    a.append(i)
    if i>10000:
        break
    i+=1
str1 = ""
for i in a:
    str1 += str(i)
b = eval(input())
print(str1[b])
数字再大,就有可能超时了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 20:36:00 | 显示全部楼层

数字可能会很大,所以你的方法不可行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 20:51:03 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-1 20:59 编辑

暂时只想到这个方法,后续看看还有没有更好的,看看效率如何
def f340(n):
    return ''.join([str(i) for i in range(n+1)])[n]   
print(f340(333333))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2020-3-1 21:07:11 | 显示全部楼层
我看不懂题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-1 21:13:27 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-1 21:33 编辑

再来一种方法,可能会快很多
def p340(n):
    a = ''
    for i in range(0, n+1):
        a += str(i)
        if len(a) > n:
            return a[n]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 21:19:29 | 显示全部楼层
解决!!(๑•̀ㅂ•́)و✧(我的颜文字为什么成了这个亚子!!!)
def solve(n:int,which=False)->int:
    if n == 0:
        return 0
    n -= 1
    i = 0
    while n >= 10**(i+1):
        n -= (10**(i+1))-1
        i += 1
    num = 10**i
    add,j = divmod(n,i+1)
    if which:print('数字 %d 的第 %d 位'%(num+add,j))
    return int(str(num+add)[j])
if __name__ == '__main__':
    print('示例1 输出:',solve(3))
    print('示例2 输出:',solve(11,1))
感觉寄几棒棒哒。

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-1 21:33:37 | 显示全部楼层
def f340(n):
    res=''
    m=0
    while len(res)<n+1:
        res+=str(m)
        m+=1
    return res[n]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2020-3-1 21:48:56 | 显示全部楼层
本帖最后由 一个账号 于 2020-3-1 21:59 编辑
def func(n):
    return int(''.join([str(i) for i in range(n+1) if len(str(i))-1 <= n])[n])

不知道列表推导式会不会更快一些

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2020-3-1 21:51:27 | 显示全部楼层
a=int(input())
b=''
for i in range(a+1):
     b+=str(i)
print(b[a])

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-1 21:55:13 | 显示全部楼层
本帖最后由 TJBEST 于 2020-3-1 22:35 编辑

答案来了,不知道快不快
def fun340(n):
    def reshapeBit(p):
        bit = 1
        upgate = 10
        while True:
            if p <= upgate:
                upgate -= 9*(10**(bit-1))*bit if bit > 1 else upgate
                return bit,upgate
            else:
                bit = bit + 1
                upgate += 9*(10**(bit-1))*bit
    p = n + 1
    getBit,lowBits = reshapeBit(p)
    firstNum = 10**(getBit-1) if getBit > 1 else 0
    div = (p - lowBits)//getBit
    res = (p - lowBits)%getBit
    if res == 0:
        return int(str(firstNum+div-1)[-1])
    else:
        return int(str(firstNum+div)[res-1])

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-1 22:15:20 | 显示全部楼层
本帖最后由 hhb1988 于 2020-3-1 22:58 编辑
numorien =int(input('请输入一个正整数:'))
num = numorien
if num < 10:
    out = str(num)
    num2 = 0
   
else:
    i = 0
    num -= 10
    while num >= 0:
        i += 1
        num -=  9*(10**i)*(i+1)
    
    num +=  9*(10**i)*(i+1)
    num1 = 10**i + (num// (i+1))
    num2 = num% (i+1)    
    out = str(num1)
    
print('第%d位是:'% numorien,out[num2])

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-1 22:24:07 | 显示全部楼层
本帖最后由 塔利班 于 2020-3-1 22:59 编辑
def f340(n):
    i=0
    while True:
        t=9*10**i*(i+1)
        if n>=t:
            n-=t
            i+=1
        else:
            a,b=divmod(n,i+1)
            if b:
                return int(str(10**i+a)[b-1])
            else:
                return int(str(10**i+a-1)[-1])

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-1 22:39:07 | 显示全部楼层
def day340_f1():
    n = int(input('Please input n:'))
    big_num = ''
    i = 0
    length = 0
    while length <= n:
        big_num += str(i)
        i += 1
        length = len(big_num)
    print(big_num)
    print('No. %d in big number is %c \n' % (n, big_num[n]))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2020-3-1 22:45:13 | 显示全部楼层
TJBEST 发表于 2020-3-1 21:55
答案来了,不知道快不快

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

使用道具 举报

发表于 2020-3-1 22:47:45 | 显示全部楼层

谢谢夸奖,看看别的鱼油吧,应该有更快的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 22:50:50 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-1 23:42 编辑
TJBEST 发表于 2020-3-1 22:47
谢谢夸奖,看看别的鱼油吧,应该有更快的


都是高手,都要值得学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 22:52:01 | 显示全部楼层
kinkon 发表于 2020-3-1 22:50
别的数据大了出现错误了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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