python算法题练习1

2019-08-05  本文已影响0人  星野琉璃

Description

实现一个函数exp:它接受一个正的小数参数 epsilon,按照如下算法计算 e^x 的近似值:

exp(x) ≈ 1 + x + x^2/2! + ... + x^i / i! + ... + x^n / n!

注意第i项的公式是a_i = x^i / i!,求和的范围是0 <= i <= n

计算

exp(x) ≈ a_0 + ... a_k其中|a_k| < epsilon且a_k是满足这个不等式的第一个项。

思考如何优化这个算法。

Input

第一行是小数epsilon,

第二行是需要计算的x。

Output

输出一个保留6位小数的结果。可以用 `"%.6f" % result` 来打印。

Sample Input 1

0.0001

1

Sample Output 1

2.718279

Sample Input 2

0.01

0

Sample Output 2

1.000000

算法总结:

Flag可以用于表示true false

Den可以用于表示阶乘

最开始的做法是定义了两个函数:一个exp,一个multiply用来算n!。其实这样算会造成很多冗余。可以用while 和设定变量,让数据进行迭代。

但是这道题还是显示错了,说是差一个case wa让我很迷。。。

def exp(epsilon,x):

    result=1

    t=1

    flag=1

    den=1

    if x==0:

        return "%.6f" % result

    else:

        while flag==1:

            den=den*t

            a=x**t/den

            t=t+1

            if abs(a)<epsilon:

                flag=0

            result=result+a

        return "%.6f" % result      

epsilon = float(input())

x = float(input())

print(exp(epsilon, x))

TwoSum (Python 3)

Description

给出一个整数数组arr 和一个目标和整数 a,返回一个 tuple `(i, j)`,其中 `arr[i] + arr[j] == a and i != j`。如果不存在这样的 i, j,返回 None。

数组中的每一项都满足在0 到 999 之间。

注意:

本题只支持Python 3,对其它语言不支持。

只需要实现函数two_sum 即可,不需要自己处理输入输出。

Input

整数数组参数arr 和整数 a

Output

一个tuple (i, j),或 None

Sample Input 1

[],1

Sample Output 1

None

Sample Input 2

[1], 1

Sample Output 2

None

Sample Input 3

[1,1,3], 4

Sample Output 3

(0, 2)

这道题我的思路是:因为在输入时会被输入[],以及数字都会在一开始转换成str型。因此存储进变量之后结果会变成”[balabalala]”,所以需要先将’[‘,’]’删除,再将剩余的字符转化为列表,再将列表内的str转化为int字符

这道题运用的知识有以下几个:

[if !supportLists]00001. [endif]

import re

string = u'127米'

print re.findall(r"\d+\.?\d*", string)

从字符串中提取数字

使用map方法

>>> list = [1.3, 2.3, 4, 5]   #带有float型的列表 >>> int_list = map(int,list)  #使用map转换>>> print int_list

[1, 2, 4, 5]

再使用了两个for循环,但是很迷惑的是这道题也不对orz

import re

arr=input("")

a=int(input())

arr=re.findall(r"\d+\.?\d*",arr)

arr=list(map(lambda x:int(x),arr))

b=len(arr)

def two_sum(a):

    if b<=1:

        return None

    else:

        flag=1

        for x in range(0,b-1):

            for i in range(x+1,b):

                v=arr[x]+arr[i]

                if v==a:

                    flag==0

                    result=(x,i)

                    return result

                    break

        if flag==1:

            return None

print(two_sum(a))

上一篇 下一篇

猜你喜欢

热点阅读