下面向大家介绍几个python算法题。

一:二分法求平方根

1.题目要求为

2.输入输出格式为

3.博主解题的思路

  这道题在c语言中是一道经典的题目,可以用循环,或者递归,在这里我们用python来写。无论是循环还是递归,都是下面的思路:

  二分法就是从中间开始取,把我们每次的结果的变化值(这里是平方)和初始数值对比,然后分别从左右两边截取。

  这里首先设定两个范围定界符low与high,而且有可能我们输入法的小于1,就需要语法max(n,1.0),然后得到每次的中间值mid,然后进行循环或者递归,条件是,我们最终的得到的平方根mid的平方和我们最初的数值n的相差范围在1e-6。

  然后根据mid的平方和n对比,如果mid的平方小于n的话,说明n的平方根在原来中间值的右边,此时就要在中间值以及最大值的那个范围寻找,把下一次的初始值设为前一次的中间值,然后前一次的中间值取下一次的中间值;如果如果mid的平方大于n的话,刚好反过来,这样等到循环到mid的平方和我们最初的数值n的相差范围在1e-6时,就可以认为结果在合理范围内。

4.代码如下

(1)循环解题代码
from math import sqrt

def sqrt_binary(n):
low = 0
high = max(n,1.0)
mid = (high + low) / 2.0 while abs(mid ** 2 - n) > 1e-6:
if mid ** 2 < n:
low = mid
else:
high = mid
mid = (high + low) / 2.0
print(mid)
print(sqrt(n)) n = eval(input(""))
sqrt_binary(n)
(2)递归解题代码
from math import sqrt

def sqrt_binary(n,low,high,mid):
if abs(mid ** 2 - n) <= 1e-6:
print(mid)
print(sqrt(n))
else:
if mid ** 2 < n:
low = mid
mid = (high + low) / 2.0
sqrt_binary(n,low,high,mid)
else:
high = mid
mid = (high + low) / 2.0
sqrt_binary(n,low,high,mid) n = eval(input(""))
low = 0
high = max(n,1.0)
mid = (high + low) / 2.0
sqrt_binary(n,low,high,mid)

二:Collatz猜想

1.题目要求为

2.输入输出格式为

3.博主解题的思路

  这是一道十分简单的题目,我们可以用循环或递归对不同的情况判断即可。

4.代码如下

(1)循环解题代码
n = eval(input(""))

while n != 1:
if n % 2 == 0:
n /= 2
print('%.1f' % n)
else:
n = 3 * n + 1
print('%.1f' % n)
(2)递归解题代码
n = eval(input(""))

def get(n):
if n != 1:
if n % 2 == 0:
n /= 2
print('%.1f' % n)
get(n)
else:
n = 3 * n + 1
print('%.1f' % n)
get(n) get(n)

三:算24(只考虑满足,不考虑把所有情况找出来)

1.题目要求为

2.输入输出格式为



3.博主解题的思路

  这里首先要考虑怎样用数学的方法判断4个数字是否可以得带24,在考虑用程序如何实现。

(1)常规方法

   数学方法算24:

  这里其实可以穷举,抽象四个数为n1,n2,n3,n4,然后考虑和符号配合的情况,然后一次再和四个数进行配合,但是可能比较繁琐,不太提倡这种方法。

   程序思路(繁琐的方法):

  计算顺序有下面的五种:

  ((n1 运算符1 n2) 运算符2 n3) 运算符3 n4

  n4 运算符3 ((n1 运算符1 n2) 运算符2 n3)

  (n3 运算符2 (n1 运算符1 n2)) 运算符3 n4

  n4 运算符3 (n3 运算符2 (n1 运算符1 n2))

  (n1 运算符1 n2) 运算符3 (n3 运算符2 n4)

  而4个操作数有4 * 3 * 2 * 1 = 24种排序。

  对于n1 n2 n3 n4中间的操作数,每个位置有加减乘除四种运算符,不考虑括号,有4 * 4 * 4 = 64种搭配。

  接下来就需要编程了,有下面的步骤:

  外层循环,对24种数字排序组合

  内层循环,对64种运算符排列组合

  循环内部,分别按照5种运算顺序(带括号),进行计算,然后判断结果是否等于24,得到结果,输出YES与搭配,否则输出ERROR。

   这种方法可以得到所有可能的结果。但是要进行小数除法。

4.代码如下

(1)普通方法
from itertools import permutations

def run_operators(a,op,b):
"""
这里简化说明,是每一步的操作
"""
result = 0.0
num1 = float(a)
num2 = float(b)
if op == '+':
result = num1 + num2
elif op == '-':
result = num1 - num2
elif op == '*':
result = num1 * num2
else:
if num2 == 0:
result = 9999999999999 #这里无限大,避免出错
else:
result = num1 / num2
return result def main():
n1 = eval(input(""))
n2 = eval(input(""))
n3 = eval(input(""))
n4 = eval(input("")) # 如果输入[0,9]范围之外,就会报错
if n1 < 0 or n2 < 0 or n3 < 0 or n4 < 0 or n1 > 9 or n2 >9 or n3 > 9 or n4 > 9:
print("NO") num = []
# 24种操作数排列组合,用二维列表表示
for i in list(permutations([n1, n2, n3,n4], 4)):
num.append(list(i)) opt = []
operators = ['+','-','*','/']
# 64种运算符排列组合生成,用二维列表表示
for i in range(0,4):
for j in range(0,4):
for k in range(0,4):
opt.append([operators[i],operators[j],operators[k]]) str1 = ""
# 下面是最终的运算判断以及排列组合
for n in num:
for p in opt:
# ((n1 运算符1 n2) 运算符2 n3) 运算符3 n4
result = run_operators(run_operators(run_operators(n[0],p[0],n[1]),p[1],n[2]),p[2],n[3])
if int(result) == 24:
str1 = 'YES'
print('YES')
print("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}".format("(","((",n[0],p[0],n[1],")",p[1],n[2],")",p[2],n[3],")"))
exit()
# n4 运算符3 ((n1 运算符1 n2) 运算符2 n3)
result = run_operators(n[3],p[2],run_operators(run_operators(n[0],p[0],n[1]),p[1],n[2]))
if int(result) == 24:
str1 = 'YES'
print('YES')
print("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}".format("(",n[3],p[2],"((",n[0],p[0],n[1],")",p[1],n[2],")",")"))
exit()
# (n3 运算符2 (n1 运算符1 n2)) 运算符3 n4
result = run_operators(run_operators(n[2],p[1],run_operators(n[0],p[0],n[1])),p[2],n[3])
if int(result) == 24:
str1 = 'YES'
print('YES')
print("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}".format("(","(",n[2],p[1],"(",n[0],p[0],n[1],"))",p[2],n[3],")"))
exit()
# n4 运算符3 (n3 运算符2 (n1 运算符1 n2))
result = run_operators(n[3],p[2],run_operators(n[2],p[1],run_operators(n[0],p[0],n[1])))
if int(result) == 24:
str1 = 'YES'
print('YES')
print("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}".format("(",n[3],p[2],"(",n[2],p[1],"(",n[0],p[0],n[1],"))",")"))
exit()
# (n1 运算符1 n2) 运算符3 (n3 运算符2 n4)
# result = run_operators(run_operators(n[0],p[0],n[1]),p[2],run_operators(n[2],p[1],n[3]))
# if int(result) == 24:
# str1 = 'YES'
# print('YES')
# print("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}".format("(","(",n[0],p[0],n[1],")",p[2],"(",n[2],p[1],n[3],")",")",end=""))
# break
if str1 == '':
print('NO') main()

  结果如下:

python算法题 python123网站单元四题目的更多相关文章

  1. python算法题

    python几道简单的算法题   最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都 ...

  2. Python算法题(三)——经典函数题

    题目一(统计字符串中指定类型字符的个数): 假设所有字符分为三类:字母,数字及其他字符.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬ ...

  3. Python算法题(二)——国际象棋棋盘(排列组合问题,最小的K个数)

    题目一(输出国际象棋棋盘)  分析: 用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.   主要代码: for i in range(8): for j in range(8 ...

  4. Python算法题(一)——青蛙跳台阶

    题目一(青蛙跳台阶): 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 假设只有一级台阶,则总共只有一种跳法: 假设有两级台阶,则总共有两种跳法: ...

  5. Python算法题:金字塔

    代码如下: #Python金字塔练习 """ 最大层数:max_level 当前层数:current_level 金字塔正序时: 每层的空格=最大层数-当前层数 每层的星 ...

  6. Python算法题:有100只大、中、小骆驼,100框土豆,一只大骆驼可以背3框,中骆驼可以背俩框,小骆驼两只背一筐,问大中小各有多少只骆驼?

    1 for x in range(0,100): 2 for y in range(0,100): 3 for z in range(0, 100): 4 if x*3+y*2+0.5*z == 10 ...

  7. python+java蓝桥杯ACM日常算法题训练(一)10基础题

    目录 1.简单的a+b 2.第一个HelloWorld程序! 3.三个数最大值 4.密码破译 5.母牛的故事 6.7.8.9.10 @(这里写自定义目录标题) 算法题训练网站:http://www.d ...

  8. 10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:   ...

  9. python每日经典算法题5(基础题)+1(中难题)

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

随机推荐

  1. overflow-x:scroll失效问题解决

    在移动设备上设置overflow-x:scroll,大部分机型都是展示正常的,在安卓哦5.0系统上,无论怎么样滚动条都不会生效,终于找到了解决办法: display: -webkit-box; // ...

  2. 使用android日志工具

    Log的级别? 日志级别按照高低排序为:ERROR,WARN,INFO,DEBUG,VERBOSE, 日志输出: Log.e()输出ERROR级别的日志信息 Log.w()输出WARN,ERROR级别 ...

  3. 安装quickLook插件以及解决如何不能读取offic问题

    目录 @(安装quickLook插件) quickLook插件是Mac上的快速浏览的一个功能,现在win10系统上也能安装插件,这个插件可以快速浏览txt,doc,图片,表格等文件如下图: 我认为最方 ...

  4. pyspark 使用时环境设置

    在脚本中导入pyspark的流程 import os import sys spark_name = os.environ.get('SPARK_HOME',None) # SPARK_HOME即sp ...

  5. JavaScript显式类型转换与隐式类型转换

    隐式类型转换 四则运算 判断语句 toString 在 JavaScript 中声明变量不需指定类型,对变量赋值也没有类型检查,同时还允许隐式类型转换. 这些特征说明 JavaScript 属于弱类型 ...

  6. 通过Python代码操作MySQL:

    pymsql / MySQLdb pymysql支持 py2/py3 MySQLdb支持py2 ORM框架 django orm ( 自己对数据连接有优化机制 ) SQLAlchemy ( 自带数据库 ...

  7. 剑指Offer-15.反转链表(C++/Java)

    题目: 输入一个链表,反转链表后,输出新链表的表头. 分析: 可以利用栈将链表元素依次压入栈中,再从栈中弹出元素重新建立链表,返回头节点. 也可以在原有的链表上来翻转,先保存当前节点的下一个节点,然后 ...

  8. BZOJ2733/LG3324 「HNOI2014」永无乡 权值线段树合并

    问题描述 BZOJ2733 LG3224 题解 对于每个结点建立一棵权值线段树. 查询操作就去查询第 \(k\) 大,合并操作就合并两颗权值线段树. 并查集维护连通性. 同时 STO hkk,zcr, ...

  9. Ultimate Chicken Horse GameProject第三次迭代成果文档

    经过三次迭代我们实现了游戏的基本功能 项目文档的github链接:https://github.com/k6tok12355/Ultimate-Chicken-Horse 下面是我们在第一次迭代中设定 ...

  10. VMware虚拟机安装Centos7后设置静态ip

    VMware虚拟机安装Centos7后设置静态ip 1. 先设置虚拟机的网络,打开虚拟网络编辑器: 2. 选择Vm8 234都要勾选 3. 打开NAT设置,看到123,待会要用. 4. 打开虚拟机服务 ...