python刷题第三周
以下是本周有所收获的题目
第一题:
第4章-4 验证“哥德巴赫猜想” (20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。输入格式: 输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式: 在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤
q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
我的代码:
n = int(input())
for i in range(2, n):
flag = 0
for x in range(2, i // 2):
if i % x == 0:
flag = 1
break
if flag == 0:
for x in range(i, n):
if i + x == n:
flag = 0
for y in range(2, x // 2):
if x % y == 0:
flag = 1
break
if flag == 0:
print("%d = %d + %d" % (n, i, x))
exit()
由于算法不够好,有两个测试点显示运行超时。
别人的代码:
#本题难点在于避免数字较大时超时
import math
n = int(input())
for p in range(2,n):
for i in range(2,int(math.sqrt(p))+1):
if p%i == 0:
break
else:
q = n-p
for k in range(2,int(math.sqrt(q))+1):
if q%k == 0:
break
else:
print("{} = {} + {}".format(n,p,q))
break
思考:
1.我想对循环的中的变量开根号,但却一直无法实现,直到我看到别人的代码之后才发现原来开完根号之后要转换为int类型!
int(math.sqrt(p))
2 在找到第一个素数之后另一个素数可以直接用n-x得到,然后再判断是不是素数。而我的代码中却还要再用一个循环找,效率太低。
3 对于判断素数,还有一个地方值得我学习
for k in range(2,int(math.sqrt(q))+1):
if q%k == 0:
break
else:
print("{} = {} + {}".format(n,p,q))
这里的if else的用法非常好,注意else的位置,在for的下面。如果没有一个if符合,则执行else。以后我也应该这样做。
第二题:
第4章-6 输出前 n 个Fibonacci数 (15 分) 本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,...。
输入格式: 输入在一行中给出一个整数N(1≤N≤46)。
输出格式: 输出前N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。
如果N小于1,则输出"Invalid."
输入样例1: 7
输出样例1:
1 1 2 3 5
8 13
输入样例2: 0
输出样例2: Invalid.
我的代码:
N = int(input())
ls = [1 for x in range(N)]
count = 0
if N < 1:
print("Invalid.")
exit()
for i in range(0, N):
if i == 0 or i == 1:
print("{:=11}".format(ls[i]), end="")
count += 1
continue
ls[i] = (ls[i - 2] + ls[i - 1])
print("{:=11}".format(ls[i]), end="")
count += 1
if count == 5 or i == N - 1:
print()
count = 0
我学到了:
1.格式化输出: 题目要求输出的每个数占11位,在C中可以通过setw函数实现,而在python中可以通过可以直接在print中实现:
print("{:=11}".format(ls[i]), end="")
以下是format的相关知识:
格式限定符:
语法是{}中所带:号即为格式限定符,如:填充与对齐 填充常跟对齐一起使用 ^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充 例如:’{:<8.3}’.format(0.12345) 输出为
0.123 ,共占八个字符位置,可以用来进行输出对齐;In [15]: '{:>8}'.format('189') Out[15]: ' 189' In [16]:
'{:0>8}'.format('189') Out[16]: '00000189' In [17]:
'{:a>8}'.format('189') Out[17]: 'aaaaa189' ————————————————
版权声明:本文为CSDN博主「christianashannon」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/christianashannon/article/details/78964961
2.初始化列表:
我在一开始写的时候,因为列表的长度过短,比较麻烦,后来初始化长度之后就可以了,
之前一直不知道怎么初始化列表。
ls = [1 for x in range(N)] ## 1处填初始化的值
第三题:
第4章-12 求满足条件的斐波那契数 (30 分)
斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。输入格式: 在一行输人一个正整数n(n>=10)。
输出格式: 在一行输出大于n的最小斐波那契数。
我的代码:
ls = [1 for x in range(1000)]
i = 2
n = int(input())
while 1:
print(ls[i])
if ls[i] > n:
print(ls[i])
break
else:
ls[i] = ls[i - 2] + ls[i - 1]
i += 1
我想建立一个长度为1000的列表,再将列表的数与n比较,得出符合的斐波那契数。
但是我发现当我通过ls = [1 for x in range(1000)]
将ls初始化之后,列表的值无法改变,暂时没有找到解决的办法。
别人的代码:
n=int(input())
a=1
b=1
while a<=n:
a,b=b,a+b
print(a)
思考:
看了别人的代码才知道可以写的这么简单,压根就不用使用列表,只需要一个循环就可以解决了!可以学习的地方还有很多啊
以后我会多尝试少使用列表,多用迭代的方式解决问题吧。
第四题:
第4章-13 求误差小于输入值的e的近似值 (20 分)
自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。ei代表前i项求和。输入误差范围error,当
ei+1-ei<error,则表示e的近似值满足误差范围。输入格式: 在一行输入误差范围。
输出格式: 在一行输出e的近似值(保留6位小数)。
我的代码:
s1 = -2.000000
s2 = 0.000000
num = 0
y = 1
n = float(input())
while s2 - s1 >= n:
j = 1
for x in range(1, y + 1):
j *= x
s1 = s2
s2 += 1 / j
y += 1
s2 += 1
print("%0.6f" % s2)
别人的代码:
error=float(input())
a,b,n=1,2,2
while b-a>=error:
a,b=b,b+(b-a)/n
n=n+1
print("%.6f"%b)
思考:
毫无疑问,别人的代码比我的简洁太多太多了!
他把计算过程抽象成了一个简单的公式a,b=b,b+(b-a)/n
而不需要像我那样一个个求和,实在太厉害,他的数学一定很好。
第五题:
第4章-14 统计字符 (15 分) 本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式: 输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式: 在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
参考了别人的代码:
letter,blank,digit,other=0,0,0,0
s=input()
while 1:
for i in s:
if i.isalpha():
letter=letter+1
elif "0"<=i<="9":
digit=digit+1
elif i==" " or i=="\n":
blank=blank+1
else:
other=other+1
if letter+digit+blank+other>=10:
break
blank=blank+1
s=input()
print("letter = %d, blank = %d, digit = %d, other = %d"%(letter,blank,digit,other))
思考:
1.我一直在找python有没有一种输入函数可以把回车也读取进去,但是却找不到,因此也就不知道该怎么写。当我看到别人的代码之后发现其实根本就不必要一次性把全部字符都读进去,这是问题的关键。
2.当没有回车时,正常循环统计个数,当遇到回车后,只需要继续进行input()输入就行了,这里就需要在外层再设置一个循环,当输入的字符个数达到10个自动跳出循环,这是很关键的一个地方。
python刷题第三周的更多相关文章
- Python 刷题笔记
Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...
- python刷题第二周
1: 第3章-5 字符转换 (15 分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. ...
- python刷题第四周
本周有所收获的题目: 第一题: 第4章-17 水仙花数(20 分) (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身. 例如:153=1×1×1+5×5×5 ...
- 【python刷题】LRU
什么是LRU? LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次 ...
- 牛客SQL刷题第三趴——SQL大厂面试真题
01 某音短视频 SQL156 各个视频的平均完播率 [描述]用户-视频互动表tb_user_video_log.(uid-用户ID, video_id-视频ID, start_time-开始观看时间 ...
- 牛客SQL刷题第三趴——SQL必知必会
01检索数据 SQL60 从 Customers 表中检索所有的 ID 编写 SQL 语句,从 Customers 表中检索所有的cust_id select * from Customers; SQ ...
- python刷题专用函数。。
无它,非bin()莫属. bin(x) Convert an integer number to a binary string. The result is a valid Python expre ...
- leetcode刷题第三天<无重复字符的最长子串>
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...
- Python学习笔记第三周
目录 一.基础概念 1.集合 集合方法 a.设置集合 b.取交集 c.取并集 d.取差集 e.判断子集 f.判断父集 g.对称差集 基本操作: a.添加 b.删除 c.discard删除 d.长度 e ...
随机推荐
- Python 应用爬虫下载酷狗音乐
应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...
- SpringBoot集成websocket(Spring方式)
SpringWebSocketConfig配置 package com.meeno.chemical.socket.task.config; import com.meeno.chemical.soc ...
- 安全|常见的Web攻击手段之CSRF攻击
对于常规的Web攻击手段,如XSS.CRSF.SQL注入.(常规的不包括文件上传漏洞.DDoS攻击)等,防范措施相对来说比较容易,对症下药即可,比如XSS的防范需要转义掉输入的尖括号,防止CRSF攻击 ...
- vivo全球商城时光机 - 大型促销活动保障利器
一.背景 官网商城在双11.双12等大促期间运营同学会精心设计许多给到用户福利的促销活动,当促销活动花样越来越多后就会涉及到很多的运营配置工作(如指定活动有效期,指定活动启停状态,指定活动参与商品等等 ...
- 并发编程之:Atomic
大家好,我是小黑,一个在互联网苟且偷生的农民工. 在开始讲今天的内容之前,先问一个问题,使用int类型做加减操作是不是线程安全的呢?比如 i++ ,++i,i=i+1这样的操作在并发情况下是否会有问题 ...
- Git最强总结!
本文已经收录到Github仓库,欢迎大家围观.star.此仓库用于分享Java核心知识,包括Java基础.MySQL.SpringBoot.Mybatis.Redis.RabbitMQ等等,面试必备. ...
- uni-app 入门小白纯徒手编写组件 hello-popup
我的需求是:弹出框顶部有 title,底部有确认和取消按钮.这两部分固定,中间部分 content 的高度随自身内容会动态增长,但是它最大高度不能超过父节点 bg 的 80%,而父节点 bg 的高度也 ...
- 你的 SQL 还在回表查询吗?快给它安排覆盖索引
什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键.聚集索引.辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引的叶子节点存储的是每 ...
- 通俗易懂讲解Word2vec的本质
本文首发于微信公众号「对白的算法屋」,来一起学AI叭 一.Word2vec CBOW(Continuous Bag-of-Words):每个词的含义都由相邻词决定. Skip-gram:依据分布的相似 ...
- Robot Framework(14)- Variables 表的详细使用和具体例子
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html Variable ...