(python3)1062.最简分数(20 分)及1063 计算谱半径(20 分)

1062 最简分数(20 分)

一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。

现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。

输入格式:

输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。

输出格式:

在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。

输入样例:

7/18 13/20 12

输出样例:

5/12 7/12

题目解析:

先看下面的答案:

a,b,c = input().split()
n1, m1 = map(float, a.split('/'))
n2, m2 = map(float, b.split('/'))
c = int(c)
x, y = n1/m1, n2/m2
min_, max_ = min(x, y), max(x, y)

def judge(a,b):
    while b:
        c = a % b
        a, b = b, c
    if a == 1:
        return False
    else:
        return True

f = 0
for i in range(1,c):
    val = float(i) / c
    if val >= max_:
        break
    if val > min_:
        if judge(i,c):
            continue
        if f == 0:
            print("%d/%d" % (i,c), end="")
            f = 1
        else:
            print(" %d/%d" % (i,c), end="")

思路十分简单,既然给出了分母K,那么答案一定在1-K之间;函数judge用于判断是否互质。

需要注意的两点是,给出的两个分数,大小顺序不一定,需要min/max区分一下;最后输出结果用f区分一下,第一个结果不空格,后面每个结果前面有一个空格。

1063 计算谱半径(20 分)

在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a1+b1i,,an+bni },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。

现在给定一些复数空间的特征值,请你计算并输出这些特征值的谱半径。

输入格式:

输入第一行给出正整数 N( 10 000)是输入的特征值的个数。随后 N 行,每行给出 1 个特征值的实部和虚部,其间以空格分隔。注意:题目保证实部和虚部均为绝对值不超过 1000 的整数。

输出格式:

在一行中输出谱半径,四舍五入保留小数点后 2 位。

输入样例:

5
0 1
2 0
-1 0
3 3
0 -3

输出样例:

4.24

题目解析

此题也是我所见过的最简单的题之一了吧。。何况还是20分的。读懂题目就行,名为谱半径,其实就是根号下平方和(点到原点的距离)。

import math
N = int(input())
lst = [0.0 for i in range(N)]
for i in range(N):
    a, b = input().split()
    a, b = int(a), int(b)
    mo = math.sqrt(a*a + b*b)
    lst[i] = mo

print("%.2f" % max(lst))

猜你喜欢

转载自blog.csdn.net/xutiantian1412/article/details/80962819