以下是本周有所收获的题目

第一题:

第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刷题第三周的更多相关文章

  1. Python 刷题笔记

    Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...

  2. python刷题第二周

    1: 第3章-5 字符转换 (15 分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. ...

  3. python刷题第四周

    本周有所收获的题目: 第一题: 第4章-17 水仙花数(20 分) (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身. 例如:153=1×1×1+5×5×5 ...

  4. 【python刷题】LRU

    什么是LRU? LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次 ...

  5. 牛客SQL刷题第三趴——SQL大厂面试真题

    01 某音短视频 SQL156 各个视频的平均完播率 [描述]用户-视频互动表tb_user_video_log.(uid-用户ID, video_id-视频ID, start_time-开始观看时间 ...

  6. 牛客SQL刷题第三趴——SQL必知必会

    01检索数据 SQL60 从 Customers 表中检索所有的 ID 编写 SQL 语句,从 Customers 表中检索所有的cust_id select * from Customers; SQ ...

  7. python刷题专用函数。。

    无它,非bin()莫属. bin(x) Convert an integer number to a binary string. The result is a valid Python expre ...

  8. leetcode刷题第三天<无重复字符的最长子串>

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...

  9. Python学习笔记第三周

    目录 一.基础概念 1.集合 集合方法 a.设置集合 b.取交集 c.取并集 d.取差集 e.判断子集 f.判断父集 g.对称差集 基本操作: a.添加 b.删除 c.discard删除 d.长度 e ...

随机推荐

  1. Oracle 数据库的导入与导出

    1.导入 打开cmd,用管理员登录:sqlplussys as sysdba密码不用输: 创建表空间:create tablespace tablespaceName datafile 'E:\tab ...

  2. Git在IDEA中的日常使用

    1.Git介绍Git对于做开发的小伙伴并不陌生,Git是现在比较流行的版本控制工具.Git的仓库分为本地仓库和远程仓库,当代码开发完成后,先提交(commit)到本地仓库,再推送(push)到远程仓库 ...

  3. C语言预处理编译链接各个阶段错误,分阶段的说一下

    C语言预处理编译链接各个阶段错误,分阶段的说一下 C语言预处理编译链接各个阶段错误,分阶段的说一下比如指针异常,数组下标越界什么的    我来答 1个回答 #热议# 你觉得这辈子有希望看到996消失 ...

  4. 徒手撸一个简单的RPC框架

    来源:https://juejin.im/post/5c4481a4f265da613438aec3 之前在牛逼哄哄的 RPC 框架,底层到底什么原理得知了RPC(远程过程调用)简单来说就是调用远程的 ...

  5. 【GIS】点图层符号的方向和大小

    方向:根据属性字段设置点图层中每个要素的符号方向和大小, 1 所有要素使用同一种符号---简单渲染 在图层属性---符号系统---单一符号中进行设置,首先设置符号,在后面的[高级]选项按钮中分别设置[ ...

  6. Contos7 克隆实例 以及 配置网络-服务-等相关信息

    以下为我自己整理的克隆虚拟机和设置固定IP的方法,记录一下,以防忘记: 桥接模式网络配置 1.配置ip地址等信息在文件里做如下配置: /etc/sysconfig/network-scripts/if ...

  7. 关于windows下 python3安装 cython的说明

    针对python3.6希望在windows环境下安装cython,但是网上任何关于mingw的尝试都没有生效.所以只能下载 vs, 1.去官网https://visualstudio.microsof ...

  8. Redis(二):基本数据类型

    基础 # redis默认有16个数据库,数组下标从0开始,默认使用0号库 # 当我们启动服务器并连接客户端之后: set <key> <value> # 向数据库中添加数据用于 ...

  9. spring boot纯注解开发模板

    简介 spring boot纯注解开发模板 创建项目 pom.xml导入所需依赖 点击查看源码 <dependencies> <dependency> <groupId& ...

  10. form表单中id与name的区别

    以前经常写form表单时,不写id和name,总觉得没有什么用.后来一看后台套完的页面发现,他们都补上name,不知道所以然,就查了一下资料,吓我一跳,要是照我那样写根本不会有数据传到服务器.原来表单 ...