牛客网学习笔记(HJ54 表达式求值、HJ60 查找组成一个偶数最接近的两个素数)

188 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题目来自牛客网的华为机试题库,本文题目为简单题们HJ54 表达式求值、HJ60 查找组成一个偶数最接近的两个素数

HJ54 表达式求值

描述
给定一个字符串描述的算术表达式,计算出结果值。输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。

数据范围:只进行整型运算,确保输入的表达式合法
输入描述:
输入算术表达式
输出描述:
计算出结果值

示例1 输入:400+5 输出:405

eval函数
s = input()
print(int(eval(s)))

解析

看到题的时候完全不知所措,还想过吧常用的计算都列出来,但是查了之后才发现这么简单啊,直接用eval函数就可以了。不知道出题人是不是想让我这么解,但是这样好方便啊

HJ60 查找组成一个偶数最接近的两个素数

描述
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

输入描述:
输入一个大于2的偶数
输出描述:
从小到大输出两个素数

示例1

输入:
		20
输出:
		7
		13
n = int(input())
re = []
for i in range(2,n):
    k = 2
    for j in range(2,i):
        k += 1
        if i % j == 0:
            break
    if k == i:
        re.append(i)

l = n//2
r = n//2
while True:
    if l in re and r in re:
        break
    l -= 1
    r += 1
print(l)
print(r)

解析

因为是偶数可以从这个数的1/2开始找,一个数不停变小,另一个不停变大,当两个数都是素数的时候停止,即可得到
具体方法: 1.把2和输入数字之间的所有素数保存在数组里
2.从n//2开始向两侧找,当两个数都在第一步找到的数组里时,停止
3.这两个数就是满足条件的两个素数