鱼C论坛

 找回密码
 立即注册
查看: 6902|回复: 28

[已解决]数列问题求解

[复制链接]
发表于 2022-10-31 23:01:35 | 显示全部楼层 |阅读模式

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

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

x
数列问题,请看图片!
最佳答案
2022-11-1 05:51:17
本帖最后由 jackz007 于 2022-11-1 05:54 编辑
  1. a , p , d = map(int , input() . split())
  2. e = list(map(int , list(str(a))))
  3. e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10
  4. for k in range(-1 , - p , -1) : e[k] = 0
  5. print(*e , sep = '')
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. 124987 2 3
  3. 124950

  4. D:\[00.Exerciese.2022]\Python>python x.py
  5. 540670 3 9
  6. 540300

  7. D:\[00.Exerciese.2022]\Python>python x.py
  8. 7145042 2 8
  9. 7145020

  10. D:\[00.Exerciese.2022]\Python>python x.py
  11. 124987 2 523
  12. 124950

  13. D:\[00.Exerciese.2022]\Python>python x.py
  14. 4386709 1 2
  15. 4386707

  16. D:\[00.Exerciese.2022]\Python>
复制代码

输入输出结果

输入输出结果

数列问题

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

使用道具 举报

发表于 2022-10-31 23:32:51 | 显示全部楼层

回帖奖励 +1 鱼币

  1. def foo(n, p, d):
  2.     n = str(n)
  3.     np = int(n[-p])
  4.     if 0 <= np <= 4:
  5.         r = str((np + d) % 10)
  6.     else:
  7.         r = str(abs(np - d))[0]
  8.     return n[:-p] + r + '0' * (len(n[-p:]) - 1)

  9. if __name__ == '__main__':
  10.     N, P, D = map(int, input().split())
  11.     print(foo(N, P, D))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-11-1 05:51:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-1 05:54 编辑
  1. a , p , d = map(int , input() . split())
  2. e = list(map(int , list(str(a))))
  3. e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10
  4. for k in range(-1 , - p , -1) : e[k] = 0
  5. print(*e , sep = '')
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. 124987 2 3
  3. 124950

  4. D:\[00.Exerciese.2022]\Python>python x.py
  5. 540670 3 9
  6. 540300

  7. D:\[00.Exerciese.2022]\Python>python x.py
  8. 7145042 2 8
  9. 7145020

  10. D:\[00.Exerciese.2022]\Python>python x.py
  11. 124987 2 523
  12. 124950

  13. D:\[00.Exerciese.2022]\Python>python x.py
  14. 4386709 1 2
  15. 4386707

  16. D:\[00.Exerciese.2022]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 07:11:01 | 显示全部楼层
楼上正解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 07:11:48 | 显示全部楼层
嗯?这题用Python做
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-1 08:39:32 | 显示全部楼层

谢谢,麻烦解释下代码!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-1 08:40:24 | 显示全部楼层

谢谢,麻烦解释下代码含义!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 09:29:31 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 jackz007 于 2022-11-1 09:35 编辑
nbwubo 发表于 2022-11-1 08:40
谢谢,麻烦解释下代码含义!

  1. a , p , d = map(int , input() . split())     # 从键盘获取三个整数 :a , p , d
  2. e = list(map(int , list(str(a))))            # 把整数 a 变成列表,如果 a = 12345,那么,e = [1 , 2 , 3 , 4 , 5]
  3. e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10   # e[- p] 就是整数 a 从右边数的第 p 位,根据 e[- p] 的值,按规则计算其新值  
  4. for k in range(-1 , - p , -1) : e[k] = 0     # 把 e[- p] 右面的数都变成 0 值
  5. print(*e , sep = '')                         # 解包打印列表 e,让每个元素之间无间隔
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-1 09:55:09 | 显示全部楼层

第三行的语句有点看不懂,这个是什么语法,没有if 可以有else吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 10:03:27 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-1 10:04 编辑
nbwubo 发表于 2022-11-1 09:55
第三行的语句有点看不懂,这个是什么语法,没有if 可以有else吗?


e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10

       这样呢,还看不懂?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-1 12:58:32 | 显示全部楼层
jackz007 发表于 2022-11-1 10:03
e[- p] = (e[- p] + d) % 10 if e[- p] < 5 else abs(e[- p] - d) % 10

       这样呢,还看不懂?


哦,分支条件语句也可以这样写?写到一行上?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 13:06:20 | 显示全部楼层
nbwubo 发表于 2022-11-1 12:58
哦,分支条件语句也可以这样写?写到一行上?

           是的,e[- p] 的值取决于 if 条件,如果是 True ,就是 if 前面的值,否则,就是 else 后面的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-16 20:12:29 | 显示全部楼层
  1. a , p , d = map(int , input("请输入三个正整数,数字之间用空格隔开:") . split())    # 从键盘获取三个整数 :a , p , d
  2. e = list(map(int , list(str(a))))           # 把整数 a 变成列表,如果 a = 12345,那么,e = [1 , 2 , 3 , 4 , 5]

  3. if e[- p] < 5:
  4.     e[- p] = (e[- p] + d) % 10              # e[- p] 就是整数 a 从右边数的第 p 位,根据 e[- p] 的值,按规则计算其新值
  5. else:
  6.     abs(e[- p] - d) % 10                    # p减去d数值的绝对值,并获取该数值的个位数
  7. for k in range(-1 , - p , -1):
  8.     e[k] = 0                                # 把 e[- p] 右面的数都变成 0 值
  9. print(*e , sep = '')                        # 解包打印列表 e,让每个元素之间无间隔
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-16 20:15:23 | 显示全部楼层

改写成这样容易理解点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-16 20:16:09 | 显示全部楼层

list(str(a) 这个函数是什么意思?为什么a的数值型的值要转换成字符型?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-16 20:17:56 | 显示全部楼层

e[- p] , e[k] 语法是什么意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-16 20:43:03 | 显示全部楼层
nbwubo 发表于 2022-11-16 20:17
e[- p] , e[k] 语法是什么意思?


  1.    序列型对象的切片操作啊,你不会连这个都不懂吧?e[- p] 是负索引,以最后一个元素索引 -1 为参照的,倒数第 2 个元素索引为 -2,余此类推;而 e[k] 则是正向索引,以第一个元素索引 0 为参照,第 2 个元素索引为 1,余此类推。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-17 07:59:32 | 显示全部楼层

回帖奖励 +1 鱼币

对啊,这很基础啊就是切片操作啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-17 11:05:28 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-17 11:19:40 | 显示全部楼层
学习~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 13:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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