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

第一题:

第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. 如何保证前端项目上线后的安全?webfunny已总结前端最关键的12大指标

    实时监控大屏   众所周知:实时流量大屏,是用来监控前端项目上线质量的. 如大家所知,监控系统会监控线上应用的各项指标,如:错误.白屏.耗时等等,但是仔细一想,即使有这些监控,我们也不一定能够保证线上 ...

  2. Django推导 安装等

    HTTP协议补充 四大特性: 基于请求响应 基于TCP/IP协议之上的应用层协议 无状态 不能保存用户信息(cookie,session,token) 短链接 请求数据格式: 请求首行(请求方式,ht ...

  3. SpringBoot 整合 SpringSecurity 梳理

    文档 Spring Security Reference SpringBoot+SpringSecurity+jwt整合及初体验 JSON Web Token 入门教程 - 阮一峰 JWT 官网 Sp ...

  4. Xilinx约束学习笔记(一)—— 约束方法学

    <Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...

  5. 题解—P3000 [USACO10DEC]Cow Calisthenics G

    做这题之前最好学会 "树形 \(dp\) 求树的直径"这一前缀知识(虽然我会但是我还是没想出来) 几乎想到要求直径这道题也没什么问题了(这不是废话吗,为什么题面里给了"直 ...

  6. JavaWeb学习笔记(五)

    本文内容 1. JSP: 1. 指令 2. 注释 3. 内置对象 2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令 * 作用:用于配置JSP页面,导入资 ...

  7. 【mysql】关联查询_子查询_排序分组优化

    1. 关联查询优化 1.1 left join 结论: ①在优化关联查询时,只有在被驱动表上建立索引才有效! ②left join 时,左侧的为驱动表,右侧为被驱动表! 1.2 inner join ...

  8. go GC垃圾回收原理

    目录 1.前言 2. 垃圾回收算法 3. Golang垃圾回收 3.1 垃圾回收原理 3.2 内存标记(Mark) 3.3 三色标记 3.4 Stop The World 4. 垃圾回收优化 4.1 ...

  9. Seq2Seq sequence-to-sequence模型 简介

    Sequence-to-sequence (seq2seq) 模型. 突破了传统的固定大小输入问题框架 开创了将DNN运用于翻译.聊天(问答)这类序列型任务的先河 并且在各主流语言之间的相互翻译,和语 ...

  10. Vulnhub靶机渗透 -- DC5

    信息收集 通过nmap搜索到IP为:192.168.200.11 开启了80http.111RPC服务端口 先打开网页,然后进行目录爆破 contact.php 攻击 经搜索没有发现可以攻击wheel ...