7.3-菲波那锲数列、素数、猴子吃桃问题
2019-08-08 本文已影响1人
BeautifulSoulpy
算法有优劣之分;能写出来记行;
总结:
1.质数问题:记住几个优化的点;
2.fb数列问题;
3.三元表达式的引用会使得代码非常简洁;
质数,fb ,猴子偷桃,计算器的实现
练习1: 求100以内的 菲波那锲数列 fb(笔试/上机题); 后一项 = 前两项的和
#思路1:用循环来写;
a = 0,b = 1
print(0,a)
print(1,b)
i = 2
while True:
c = a + b
if c > 100:
break
print(i,c)
a = b
b = c
i +=1
-----------------------------------------------------
0 0
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
11 89
变体:求斐波那契数列的101项;
练习5:求10万内的所有素数(质数);prime number 9592个
质数:(经典面试题目)考验一个人的算法能力,关于算法的几个优化点必须掌握;
应用于密码学领域,是因为质数计算难度大;
思路1:先算是否为质数,再看边界问题
m=int(input('>>>'))
print(1)
#n=100
for n in range(2,m):
for i in range(2,n):
if n%i == 0:
break
else:
print(n)
--------------------------------------------
>>>100
1
2
3
5
7
.
.
83
89
97
思路2:大大减少循坏次数
# 简化方案
print(2)
for x in range(3,100,2):
for i in range(3,int(x**0.5)+1,2):
if x % i == 0:
break
else:
print(x)
总结:
1.加法的中点再正中间;
2.乘除法的重点在开方处; X**0.5
3.大于10的质数;个位一定是 1,3,7,9
思路3: 大于10的质数;个位一定是 1,3,7,9
print(2)
for x in range(3,100,2): # 一定要记住左边界都为3,舍弃所有的偶数;
if x > 10 and x % 5 == 0:
continue
for i in range(3,int(x**0.5)+1,2): #为什么到一个数的一半就行了?
if x % i == 0:
break
else:
print(x)
一定要记住左边界都为3,舍弃所有的偶数;
为什么到一个数的一半就行了?
#思路3:质数定理:
datetiem模块
导入datetime模块,显示当前日期:
import datetime
x = datetime.datetime.now()
print(x.year)
print(x.strftime("%A")
y = datetime.datetime.now()
#timedelta对象; (datetime.datetime.now()-start)
dalta[0]=(datetime.datetime.now()-start).total_seconds()
计算程序运行的时间;
------------------------
练习6:猴子吃桃子问题;
#练习6:猴子吃桃子问题;
peach = 1
for i in range(9):
peach = 2*(peach+1)
print(peach)
-------------------------
1534
练习7. 实现一个简易的计算器,效果如下:
(1). 运行后提示让用户输入一个数字
(2). 提示输入操作符(+ - * /)
(3). 再次提示输入一个数字
(4). 打印计算结果
(5). 在不退出程序的前提下,可以允许用户继续输入新一组数据计
###计算器的实现:
flag = True
while flag:
num1 = int(input('输入first number:'))
choice = input('输入操作符(+ - * /):')
num2 = int(input('输入second number:'))
if choice == '+':
print(num1,"+",num2,"=", num1+num2)
elif choice == '-':
print(num1,"-",num2,"=", num1-num2)
elif choice == '*':
print(num1,"*",num2,"=", num1*num2)
elif choice == '/':
print(num1,"/",num2,"=", num1/num2)
else:
print("非法输入")
print('是否继续使用计算?')
idea = input('>>>')
if idea == 'Y' or idea == 'y':
continue
else:
flag = False