鱼C论坛

 找回密码
 立即注册
查看: 8178|回复: 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)

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-1 20:23:28 | 显示全部楼层
难道两位数以上输出都是0吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是,只是第 11 位恰好是 0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 20:33:56 | 显示全部楼层
  1. a = [0]
  2. i = 1
  3. while True:
  4.     a.append(i)
  5.     if i>10000:
  6.         break
  7.     i+=1
  8. str1 = ""
  9. for i in a:
  10.     str1 += str(i)
  11. b = eval(input())
  12. print(str1[b])
  13. 数字再大,就有可能超时了
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

数字可能会很大,所以你的方法不可行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 21:07:11 | 显示全部楼层
我看不懂题目
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

再来一种方法,可能会快很多
  1. def p340(n):
  2.     a = ''
  3.     for i in range(0, n+1):
  4.         a += str(i)
  5.         if len(a) > n:
  6.             return a[n]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 21:19:29 | 显示全部楼层
解决!!(๑•̀ㅂ•́)و✧(我的颜文字为什么成了这个亚子!!!)
  1. def solve(n:int,which=False)->int:
  2.     if n == 0:
  3.         return 0
  4.     n -= 1
  5.     i = 0
  6.     while n >= 10**(i+1):
  7.         n -= (10**(i+1))-1
  8.         i += 1
  9.     num = 10**i
  10.     add,j = divmod(n,i+1)
  11.     if which:print('数字 %d 的第 %d 位'%(num+add,j))
  12.     return int(str(num+add)[j])
  13. if __name__ == '__main__':
  14.     print('示例1 输出:',solve(3))
  15.     print('示例2 输出:',solve(11,1))
复制代码

感觉寄几棒棒哒。

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 21:33:37 | 显示全部楼层
  1. def f340(n):
  2.     res=''
  3.     m=0
  4.     while len(res)<n+1:
  5.         res+=str(m)
  6.         m+=1
  7.     return res[n]
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

答案来了,不知道快不快
  1. def fun340(n):
  2.     def reshapeBit(p):
  3.         bit = 1
  4.         upgate = 10
  5.         while True:
  6.             if p <= upgate:
  7.                 upgate -= 9*(10**(bit-1))*bit if bit > 1 else upgate
  8.                 return bit,upgate
  9.             else:
  10.                 bit = bit + 1
  11.                 upgate += 9*(10**(bit-1))*bit
  12.     p = n + 1
  13.     getBit,lowBits = reshapeBit(p)
  14.     firstNum = 10**(getBit-1) if getBit > 1 else 0
  15.     div = (p - lowBits)//getBit
  16.     res = (p - lowBits)%getBit
  17.     if res == 0:
  18.         return int(str(firstNum+div-1)[-1])
  19.     else:
  20.         return int(str(firstNum+div)[res-1])
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 22:15:20 | 显示全部楼层
本帖最后由 hhb1988 于 2020-3-1 22:58 编辑
  1. numorien =int(input('请输入一个正整数:'))
  2. num = numorien
  3. if num < 10:
  4.     out = str(num)
  5.     num2 = 0
  6.    
  7. else:
  8.     i = 0
  9.     num -= 10
  10.     while num >= 0:
  11.         i += 1
  12.         num -=  9*(10**i)*(i+1)
  13.    
  14.     num +=  9*(10**i)*(i+1)
  15.     num1 = 10**i + (num// (i+1))
  16.     num2 = num% (i+1)   
  17.     out = str(num1)
  18.    
  19. print('第%d位是:'% numorien,out[num2])
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 22:39:07 | 显示全部楼层
  1. def day340_f1():
  2.     n = int(input('Please input n:'))
  3.     big_num = ''
  4.     i = 0
  5.     length = 0
  6.     while length <= n:
  7.         big_num += str(i)
  8.         i += 1
  9.         length = len(big_num)
  10.     print(big_num)
  11.     print('No. %d in big number is %c \n' % (n, big_num[n]))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

快准狠
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢夸奖,看看别的鱼油吧,应该有更快的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


都是高手,都要值得学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你知道正确答案吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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