当前位置 博文首页 > boysoft2002的专栏:一起挑战pythontip的题目(20)

    boysoft2002的专栏:一起挑战pythontip的题目(20)

    作者:[db:作者] 时间:2021-07-27 17:48

    第96题:Py的寻路系统
    题目描述:Py是个没有方向感的人,经常在校园内迷路,所以他经常手里拿着一张地图。每天Py都在校园内转来转去,但是Py不是一个喜欢浪费时间的人,每次转悠的时候,他总想找到一条从起点到终点的最短路。现在这个任务就交给了你,希望你给Py设计一个查询系统,Py每次只需要输入起点和终点,你就要告诉Py这两点间的最短路的长度是多少。
    现在给你两个整数n和m以及一个三元组列表L,n表示地图上路口的数目,m表示地图上小路的个数,
    其中1 <= n <= 100,0 <= m < n(n-1)/2。
    列表L由m个三元组构成,每个三元组[a, b, len]表示一条连接路口a和路口b的小路,小路长为len,路口的编号从1开始,即 1 <= a,b <= n,这里的路都是双向的,没有一条路是连接两个相同的路口。
    现在Py想从s路口到t路口,请你输出s路口到t路口的最短路径的长度,若不可达,则输出-1.
    例如:
    n=3,m=3
    L=[[1,2,1],[2,3,1],[1,3,1]]
    s=1, t=2
    则输出1,即从路口1到路口2的最短路径长度为1.示
    例:输入:n = 3
    m = 3
    s = 1
    t = 2
    L = [[1, 2, 1], [2, 3, 1], [1, 3, 1]]
    输出:1


    ============================================================
    第97题:圆的面积
    题目描述:给你两个圆,每个圆由三个参数表示,x,y,r, 其中(x,y)表示圆心坐标,r表示半径。
    现在给你这两个圆的参数,x1, y1, r1; x2,y2,r2, 请你求出这两个圆相交部分的面积,保留小数点后三位数。
    如:
    x1=20.0,y1=30.0,r1=15.0,x2=40.0,y2=30.0,r2=30.0
    则输出608.366。
    示例:输入:x1 = 20.0
    y1 = 30.0
    r1 = 15.0
    x2 = 40.0
    y2 = 30.0
    r2 = 30.0
    输出:608.366


    ============================================================
    第98题:寻找临界楼层
    题目描述:你是国际民用压缩技术公司(International Civil Pack-technical Company, ICPC)的产品测试员。
    现在你有一项任务:测试包有特殊缓冲材料的玻璃围棋子的牢固度。
    如果围棋子从某个足够高的楼层落下来就会碎,但如果没有碎,缓冲材料会自动修复损伤部分,
    也就是说如果从6楼落下来不碎,从6楼把同一颗棋子丢1000次,它都不会碎(当然在现实中,围棋子从手中多落下几次就会碎)。
    我们定义一个临界楼层:围棋子从这个楼层或更高落下来会碎,且围棋子从任何比这个楼层低的楼层落下都不会碎。
    如果棋子从1楼丢下来也碎了,临界楼层就是1。
    你的任务就是利用你面前这座偶然发现的大厦,寻找手中这种围棋子的临界楼层。
    当然,大厦不一定足够高,我们规定如果你从最高层丢棋子仍然没有摔碎棋子,还是算找到了临界楼层。
    策略1:如果你只有1颗棋子,那你不得不从1楼开始尝试丢,如果没碎就到2楼丢,还没碎就到3楼丢……
    直到棋子碎了,那你现在所在的楼层就是临界楼层(显然这是只用一颗棋子确保能发现临界楼层的唯一方法)。
    策略2:你现在有两颗棋子,你可以从10楼开始试,每次上升10层,直到第1颗棋子碎了(比如在60楼);
    然后用策略1,从51楼开始用第2颗棋子1层层试上去。这样,如果大厦共100层,你最多只要试20次就能找到这个临界楼层。
    但是这不是最佳策略:最佳策略最多只要尝试14次(最佳策略指的是在最坏情况下能用最少次数测出临界楼层的策略)。
    现在给出你面前的大厦的楼层数。请你构思出最佳测试策略,用你手中的两颗棋子最多测几次就能确保找到那个临界楼层?
    (注意:正如刚才提到的,因为大厦不一定足够高,即使在100层的大厦里你从99层丢棋子没有摔碎,
    也不能认定100层一定是临界层,而至少要到100层丢一次。当然,这一次无论棋子是否摔碎都算是找到了临界层)。
    现在给你楼层的高度n,输出对于高度为n层的大厦而言测量临界楼层的最佳策略所需的最多次数。
    如n=5, 则输出3.
    示例:输入:n = 6
    输出:3


    ============================================================
    第99题:编辑距离
    题目描述:设 A 和 B 是 2 个字符串。要用最少的字符操作将字符串 A 转换为字符串 B。
    这里所说的字符操作包括
    (1)删除一个字符;
    (2)插入一个字符;
    (3)将一个字符改为另一个字符。
    将字符串 A 变换为字符串 B 所用的最少字符操作数称为字符串 A 到 B 的编辑距离,记为d(A,B)。
    试设计一个有效算法,对任给的 2 个字符串 A 和 B,计算出它们的编辑距离 d(A,B)。
    如:
    A="fxpimu"
    B="xwrs"
    则输出5.
    示例:输入:A = "fxpimu"
    B = "xwrs"
    输出:5


    ============================================================
    第100题:计算GPA
    题目描述:每门课程的成绩分为五个等级:A,B,C,D,F(注意没有E),它们分别代表可以获得4,3,2,1,0个绩点.
    现在给你一个由大写字母构成的列表L,请你计算平均绩点,保留小数点后两位。
    若L中包含非法成绩等级,则输出-1.
    如:
    L = ["A", "B", "C", "D", "F"]
    则输出2.00
    示例:输入:L = ["A", "B", "C", "D", "F"]
    输出:2.00


    ============================================================

    来源:

    Python 爬取pythontip网站的挑战题目(附全部题目178题)

    cs