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 ...
随机推荐
- Qt列表等控件实现平滑滚动&deepin启动器存在的问题
Qt列表等控件实现平滑滚动 Qt自带的的列表控件是不能平滑滚动的,但如果滚动速度快的话很容易引起视线丢失,体验效果很差.本篇主要讲述如何在Qt中对列表控件加入平滑滚动.文中以QScrollArea控件 ...
- 006 PCI总线的桥与配置(一)
在PCI体系结构中,含有两类桥片,一个是HOST主桥,另一个是PCI桥.在每一个PCI设备中(包括PCI桥)都含有一个配置空间.这个配置空间由HOST主桥管理,而PCI桥可以转发来自HOST主桥的配置 ...
- SIM900A—基础指令
文章目录 1.ATE指令设置回显 2.ATQ指令设置返回 3.ATV指令设置返回格式 4.AT+CFUN设置模块功能 5.AT+IPR设置波特率 6.AT+CMEE设置上报错误格式 7.各种码(IME ...
- MySQL自定义函数与存储过程的创建、使用、删除
前言 日常开发中,可能会用到数据库的自定义函数/存储过程,本文记录MySQL对自定义函数与存储过程的创建.使用.删除的使用 通用语法 事实上,可以认为存储过程就是没有返回值的函数,创建/使用/删除都非 ...
- TypeScript 入门指南 【大白话】
前言 聊聊为何要学习TypeScript? 从开发角度来讲, TypeScript 作为强类型语言,对属性有类型约束.在日常开发中少了减少了不必要的因参数类型造成的BUG,当你在使用同事封装好的函数时 ...
- 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)
链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...
- taro小程序地址选择组件
效果图: address_picker.tsx: import Taro, { Component } from '@tarojs/taro' import { View, PickerView, P ...
- .Net 5 新特性之--支持字典在迭代中进行修改
我们都知道以前字典迭代中是不支持动态修改的[否则会报错::"Collection was modified; enumeration operation may not execute.&q ...
- Git分支创建命令
一. 创建test分支提交步骤 1.列出所有分支 # git branch -a 2.创建test分支 # git branch test 3.切换到test分支: ...
- 【java web】拦截器inteceptor
一.简介 java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性. Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现 ...