IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python刷题(34-36) -> 正文阅读

[Python知识库]python刷题(34-36)

Python刷题

PythonTip-挑战Python

(以下代码是在PyCharm上运行成功的,如果想要在刷题上成功运行,需要把前边的定义去掉)

34.题目描述:

生活在当代社会,我们要记住很多密码,银行卡,qq,人人,微博,邮箱等等。小P经过一番思索之后,发明了下面这种生成密码方法:给定两个正整数a和b, 利用a / b我们会得到一个长度无限的小数(若a / b不是无限小数,比如1/2=0.5,我们认为0.5是0.5000000...,同样将其看做无限长的小数),小P将该小数点后第x位到第y位的数字当做密码,这样,无论密码有多长,小P只要记住a,b,x,y四个数字就可以了,牢记密码再也不是那么困难的事情了。现在告诉你a,b,x,y(0 < a,b <= 20132013, 0 < x <= y < 100000000000),请你输出密码。例如:a = 1, b = 2, x = 1, y = 4, 则 a / b = 0.5000000..., 输出小数点后第1到4位数字,即5000

会了之后感觉这道题还挺容易的吗,不知道为什么那两天觉得这道题好难,丝毫没有头绪,但是其实就是除法和取余的运算,我们想要小数点后x位到y位的数值,但是普通方法比较难取得小数点后几位的内容,如果把这部分内容放到整数部分就比较好算了,当然也不能直接全部放到整数部分,这样如果y的值比较大的时候会使得一次性的运算量比较大,应该逐步运行,具体的做法是:首先将小数点后移x-1位,使得小数点后第一位就是x,第y-x+1就是第y位,接着将此式得到的值对b取余,此时这个数是一定小于b接着就开始第x位的内容了,先将取余得到的数乘10在对b做除法即为我们想要的x位,接着为了得到下一位就先更新数为上次所得数乘以10的b取余,此时这个数是一定小于b接着就开始第x位的内容了,先将取余得到的数乘10在对b做除法即为我们想要的x+1位,以此循环直到y-x+1位全部输出。

注意刚开始用到公式

(a*10^(x-1))%b = ((a%b)*(10^(x-1)%b))%b
a = 1
b = 2
x = 1
y = 4
num = (a%b*pow(10,x-1,b))%b
str1 = ''
while len(str1) < y-x+1:
    str1 = str1+str(int(num *10/b))
    num =num*10%b
print(str1)

35.题目描述:

给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个连续子序列,使其和最大,输出最大子序列的和。 例如,对于L=[2,-3,3,50], 输出53(分析:很明显,该列表最大连续子序列为[3,50]).


num = L[0]
he = 0
for i in range(0,len(L),1):
   he = he + L[i]
   num = max(he,num)
   he = max(he, 0)
print(num)

(我认为本题值得思考的地方是并不是遇见符号就要重新开始,而是前边之和加起来小于0了才需要重新开始计算)

36.题目描述:

给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。 这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。 例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50]).

(感觉后边的题出现了一些难度,也是我过于菜了,哈哈哈哈哈哈)

(这个题对我来说没有一下子就想清楚的方法,也是看了别人写的,弄了两个方法)

方法一:就是简单的推导,把当前列表的值,和前一个值以及当前值加上前前一个值进行比较,选择大的存起来(注意:前一个值和前前一个数值都是之前比较中选出来的不连续的值)

L = [2,-3,3,50]
L_max = [0] * len(L)
if len(L) <= 2:
    print(max(L))
else:
    L_max[0] = L[0]
    L_max[1] = max(L[0], L[1])
    for i in range(2, len(L)):
        # 对L_max[i]的赋值为,以下三项中最大的一项:L_max[i - 1], L[i] + L_max[i - 2], L[i]
        L_max[i] = max(L_max[i - 1], L[i] + L_max[i - 2], L[i])
    print(L_max[-1])
    print(L_max)
方法二:使用的公式动态规划的解题思路,寻找最优子问题,最优值为当前值或者当前值加上上一个最优值,有递推公式:L[i] = max(max(L[0:i-1],0))+L[i] i>=2
L=[2,-3,3,50]
for i in range(2, len(L)):
    L[i] = max(max(L[0:i - 1]), 0) + L[i]    #列表左闭右开
    #L[i] = max(max(L[0:i - 1]), 0) + L[i]
print(max(L))

 

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:30:49  更:2022-03-04 15:31:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:20:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码