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

第一题:

第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. 配置VRRP的多备份组

    实验拓扑和端口IP见上一个博客 实验步骤: 1.继续创建虚拟组2 2. 2. 查看 3.验证: PC1 PC2 PC1通过R2,PC2通过R3访问外网 二.验证VRRP的抢占特性 可以看到,即使R2的 ...

  2. Java:学习什么是多线程

    线程是什么 进程是对CPU的抽象,而线程更细化了进程的运行流程 先看一下这个图 线程和进程的关系有 进程中就是线程在执行,所有(主)线程执行完了进程也就结束了 多个线程从1秒钟是同时运行完成,从1纳秒 ...

  3. 容器平台(kubernetes)架构设计

    一眨眼距离上次发文好几年过去了,今天翻未读邮件看到博客有文章回复,猛然想起将博客遗忘在角落好几年了,赶紧访问博客.找回密码.翻翻文章,想写点什么但是又不知道从哪下手,N年前的第一篇文章是一个crm设计 ...

  4. WPF---数据绑定之ValidationRule数据校验(六)

    一.概述 我们知道,Binding好比架设在Source和Target之间的桥梁,数据可以借助这个桥梁进行流通.在数据流通的过程中,我们可以在Binding这座桥梁上设置关卡,对数据的有效性进行验证. ...

  5. windows安装trojan记录

    1.trojan 客户端安装教程 https://v2raytech.com/trojan-clients/ 2.chrome安装插件(crx文件)教程 https://www.jianshu.com ...

  6. vue组件里不用的css还在搜索过滤来删除?试一下vue-clearcss吧!

    这篇文章其实是推广介绍我个人的npm工具库,但你不会后悔点进来的(应该吧...)vue-clearcss 为什么要用它? 一个vue文件在长期迭代中css会越来越冗余,它不像html和js那么好删除, ...

  7. Spring 事务回滚机制详解

    1:事务原理 1.2:aop/动态代理 类路径:org/springframework/aop/framework/CglibAopProxy.java ReflectiveMethodInvocat ...

  8. vue 引用高德地图

    vue 引用地图之傻瓜式教程(复制粘贴即可用) npm 下载 npm install vue-amap --save main.js 代码 import AMap from 'vue-amap'; V ...

  9. vue的常见理论问题

    1.什么是 mvvm? mvvm 和 mvc 区别? MVVM 是 Model-View-ViewModel 的缩写.mvvm 是一种设计思想.Model 层代表数据模型,View 代表 UI 组件. ...

  10. Python - pip 批量更新

    pip 常用命令 https://www.cnblogs.com/poloyy/p/15170968.html pip list 结合 Linux 命令 pip list 命令可以查询已安装的库,结合 ...