作业4-05-函数

1034 有理数四则运算

问题描述:

本题要求编写程序,计算 2 个有理数的和、差、积、商。

输入说明:

输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

输出说明:

分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

输入样列:

样例1:
2/3 -4/2
样例2:
5/3 0/6

输出样列:

样例1:
2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)
样例2:
1 2/3 + 0 = 1 2/3
1 2/3 - 0 = 1 2/3
1 2/3 * 0 = 0
1 2/3 / 0 = Inf

代码:

码农题打扰了,网上直接嫖的,怪不得我模拟题这么菜

def f(x):
    a = x.split("/")
    if int(a[0]) == 0:
        return "0"
    fenzi = int(a[0]) // g(int(a[0]), int(a[1]))
    fenmu = int(a[1]) // g(int(a[0]), int(a[1]))
    flag = 0
    if fenzi < 0:
        flag = 1
    if abs(fenzi) >= fenmu:
        if fenzi % fenmu == 0:
            if flag == 0:
                b = str(fenzi // fenmu)
            else:
                b = "(" + str(fenzi // fenmu) + ")"
        else:
            if flag == 0:
                b = str(fenzi // fenmu) + " " + str(fenzi % fenmu) + "/" + str(fenmu)
            else:
                b = "(-" + str(fenzi * (-1) // fenmu) + " " + str(fenzi * (-1) % fenmu) + "/" + str(fenmu) + ")"
    else:
        if flag == 0:
            b = str(fenzi) + "/" + str(fenmu)
        else:
            b = "(" + str(fenzi) + "/" + str(fenmu) + ")"
    return b

def g(i, j):
    i = abs(i)
    if i < j:
        t = i
        i = j
        j = t
    d = i % j
    while d != 0:
        i = j
        j = d
        d = i % j
    return j

n = input().split()
a = n[0].split("/")
b = n[1].split("/")
fenzi1 = int(a[0])
fenmu1 = int(a[1])
fenzi2 = int(b[0])
fenmu2 = int(b[1])
res_jia = str(fenzi1 * fenmu2 + fenzi2 * fenmu1) + "/" + str(fenmu1 * fenmu2)
res_jian = str(fenzi1 * fenmu2 - fenzi2 * fenmu1) + "/" + str(fenmu1 * fenmu2)
res_chen = str(fenzi1 * fenzi2) + "/" + str(fenmu1 * fenmu2)
if fenzi2 == 0:
    res_chu = "Inf"
else:
    res_chu = str(fenzi1 * fenmu2) + "/" + str(fenmu1 * fenzi2)
print("%s + %s = %s" % (f(n[0]), f(n[1]), f(res_jia)))
print("%s - %s = %s" % (f(n[0]), f(n[1]), f(res_jian)))
print("%s * %s = %s" % (f(n[0]), f(n[1]), f(res_chen)))
if fenzi2 != 0:
    print("%s / %s = %s" % (f(n[0]), f(n[1]), f(res_chu)))
else:
    print("%s / %s = %s" % (f(n[0]), f(n[1]), res_chu))

1054 求平均值

问题描述:

本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。

输入说明:

输入第一行给出正整数 N(≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。

输出说明:

对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出结果:The average of K numbers is Y,其中 K 是合法输入的个数,Y 是它们的平均值,精确到小数点后 2 位。如果平均值无法计算,则用 Undefined 替换 Y。如果 K 为 1,则输出 The average of 1 number is Y。

输入样列:

样例1:
7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
样例2:
2
aaa -9999

输出样列:

样例1:
ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38
样例2:
ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined

扫描二维码关注公众号,回复: 10789265 查看本文章

代码:

把错误的直接当成异常输出

input()
num = input().split()
res = []
for i in num:
    try:
        float(i)
        if '.' in i:
            s = i.split('.')
            if len(s[-1]) > 2:
                raise Exception
        if not -1000 <= float(i) <= 1000:
            raise Exception
        res.append(float(i))
    except:
        print('ERROR: {} is not a legal number'.format(i))
if len(res) == 0:
    print('The average of 0 numbers is Undefined')
elif len(res) == 1:
    print('The average of 1 number is {:.2f}'.format(res[0]))
else:
    print('The average of {} numbers is {:.2f}'.format(len(res), sum(res) / len(res)))

1059 C语言竞赛

问题描述:

C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:

  • 冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
  • 排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
  • 其他人将得到巧克力。

给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。

输入说明:

输入第一行给出一个正整数 N(≤104),是参赛者人数。随后 N 行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组成)。接下来给出一个正整数 K 以及 K 个需要查询的 ID。

输出说明:

对每个要查询的 ID,在一行中输出 ID: 奖品,其中奖品或者是 Mystery Award(神秘大奖)、或者是 Minion(小黄人)、或者是 Chocolate(巧克力)。如果所查 ID 根本不在排名里,打印 Are you kidding?(耍我呢?)。如果该 ID 已经查过了(即奖品已经领过了),打印 ID: Checked(不能多吃多占)。

输入样列:

6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222

输出样列:

8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

代码:

import math
def isPrime(x):
    if x == 1:
        return False
    if x != 2 and x % 2 == 0:
        return False
    flag = True
    for i in range(3, int(math.sqrt(x)) + 1, 2):
        if x % i == 0:
            flag = False
            break
    return flag
dic = {}
for i in range(int(input())):
    dic[input()] = i + 1
for i in range(int(input())):
    check = input()
    if check in dic:
        rank = dic[check]
        if rank == 1:
            out = 'Mystery Award'
        elif rank == -1:
            out = 'Checked'
        elif isPrime(rank):
            out = 'Minion'
        else:
            out = 'Chocolate'
        dic[check] = -1
    else:
        out = 'Are you kidding?'
    print('%s: %s' % (check, out))

1062 最简分数

问题描述:

一个分数一般写成两个整数相除的形式: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

代码:

python的gcd()不知道怎么用只能手写了

def gcd(m, n):
    m = abs(m)
    n = abs(n)
    if m < n:
        m, n = n, m
    while m % n != 0:
        r = m % n
        m = n
        n = r
    return n
a = input().split()
x = min(eval(a[0]), eval(a[1]))
y = max(eval(a[0]), eval(a[1]))
k = 1
result = []
while (k / int(a[2]) < y):
    if k / int(a[2]) > x and gcd(k, int(a[2])) == 1:
        result.append(str(k) + '/' + str(int(a[2])))
    k += 1
print(" ".join(result))

1070 结绳

问题描述:

给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串连后,原来两段绳子的长度就会减半。
给定 N 段绳子的长度,你需要找出它们能串成的绳子的最大长度。
在这里插入图片描述

输入说明:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N(2≤N≤104);第 2 行给出 N 个正整数,即原始绳段的长度,数字间以空格分隔。所有整数都不超过104。

输出说明:

在一行中输出能够串成的绳子的最大长度。结果向下取整,即取为不超过最大长度的最近整数。

输入样列:

8
10 15 12 3 4 13 1 15

输出样列:

14

代码:

简单贪心吧,有些像合并果子,易证从小到大排序,从小的开始两两合并长度最长

n = input()
list1 = list(map(int, input().split()))
list1.sort()
res = (int(list1[0]) + int(list1[1])) / 2
for i in range(2, len(list1)):
    res = (int(res) + int(list1[i])) / 2
print(int(res))

1080 MOOC期终成绩

问题描述:

对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为 G=(Gmid−term×40%+Gfinal×60%),如果 Gmid−term>Gfinal;否则总评 G 就是 Gfinal。这里 Gmid−term 和 Gfinal 分别为学生的期中和期末成绩。
现在的问题是,每次考试都产生一张独立的成绩单。本题就请你编写程序,把不同的成绩单合为一张。

输入说明:

输入在第一行给出3个整数,分别是 P(做了在线编程作业的学生数)、M(参加了期中考试的学生数)、N(参加了期末考试的学生数)。每个数都不超过10000。
接下来有三块输入。第一块包含 P 个在线编程成绩 Gp;第二块包含 M 个期中考试成绩 Gmid−term;第三块包含 N 个期末考试成绩 Gfinal。每个成绩占一行,格式为:学生学号 分数。其中学生学号为不超过20个字符的英文字母和数字;分数是非负整数(编程总分最高为900分,期中和期末的最高分为100分)。

输出说明:

打印出获得合格证书的学生名单。每个学生占一行,格式为:
学生学号 Gp Gmid−term Gfinal G
如果有的成绩不存在(例如某人没参加期中考试),则在相应的位置输出“−1”。输出顺序为按照总评分数(四舍五入精确到整数)递减。若有并列,则按学号递增。题目保证学号没有重复,且至少存在1个合格的学生。

输入样列:

6 6 7
01234 880
a1903 199
ydjh2 200
wehu8 300
dx86w 220
missing 400
ydhfu77 99
wehu8 55
ydjh2 98
dx86w 88
a1903 86
01234 39
ydhfu77 88
a1903 66
01234 58
wehu8 84
ydjh2 82
missing 99
dx86w 81

输出样列:

missing 400 -1 99 99
ydjh2 200 98 82 88
dx86w 220 88 81 84
wehu8 300 55 84 84

代码:

Gp = {}
Gmidterm = {}
Gfinal = {}
G = {}
n, m, k = map(int, input().split())
for i in range(n):
    x, y = input().split()
    if int(y) >= 200:
        Gp[x] = int(y)
for i in range(m):
    x, y = input().split()
    if x in Gp.keys():
        Gmidterm[x] = int(y)
for i in range(k):
    x, y = input().split()
    if x in Gp.keys():
        Gfinal[x] = int(y)
for t in Gp:
    if t not in Gmidterm.keys():
        Gmidterm[t] = -1
    if t not in Gfinal.keys():
        Gfinal[t] = -1
    if Gmidterm[t] > Gfinal[t]:
        G[t] = int(Gmidterm[t] * 0.4 + Gfinal[t] * 0.6 + 0.5)
    else:
        G[t] = Gfinal[t]
G = sorted(G.items(), key=lambda item: (-item[1], item[0]))
for t in G:
    if int(t[1]) >= 60:
        id = t[0]
        print(t[0], Gp[id], Gmidterm[id], Gfinal[id], t[1])

1092 最好吃的月饼

问题描述:

月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种。
若想评比出一种“最好吃”的月饼,那势必在吃货界引发一场腥风血雨…… 在这里我们用数字说话,给出全国各地各种月饼的销量,要求你从中找出销量冠军,认定为最好吃的月饼。
在这里插入图片描述

输入说明:

输入首先给出两个正整数 N(≤1000)和 M(≤100),分别为月饼的种类数(于是默认月饼种类从 1 到 N 编号)和参与统计的城市数量。
接下来 M 行,每行给出 N 个非负整数(均不超过 1 百万),其中第 i 个整数为第 i 种月饼的销量(块)。数字间以空格分隔。

输出说明:

在第一行中输出最大销量,第二行输出销量最大的月饼的种类编号。如果冠军不唯一,则按编号递增顺序输出并列冠军。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样列:

5 3
1001 992 0 233 6
8 0 2018 0 2008
36 18 0 1024 4

输出样列:

2018
3 5

代码:

n, m = map(int, input().split())
d = {}
for i in range(1, n + 1):
    d[i] = 0
for _ in range(m):
    list1 = list(map(int, input().split()))
    for i in range(n):
        d[i + 1] += list1[i]
mx = max(d.values())
print(mx)
res = []
for k, v in d.items():
    if v == mx:
        res.append(str(k))
print(' '.join(res))

1094 谷歌的招聘

问题描述:

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。
自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921… 其中粗体标出的 10 位数就是答案。
在这里插入图片描述
本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入说明:

输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出说明:

在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样列:

样例1:
20 5
23654987725541023819
样例2:
10 3
2468024680

输出样列:

样例1:
49877
样例2:
404

代码:

import math
def isPrime(x):
    if x == 1:
        return False
    if x != 2 and x % 2 == 0:
        return False
    flag = True
    for i in range(3, int(math.sqrt(x) + 1), 2):
        if x % i == 0:
            flag = False
            break
    return flag

n, m = map(int, input().split())
list1 = input()
for i in range(n - m + 1):
    a = list1[i:i + m]
    num = int(a)
    if isPrime(num):
        print(a)
        break
else:
    print(404)
发布了28 篇原创文章 · 获赞 0 · 访问量 855

猜你喜欢

转载自blog.csdn.net/weixin_43866408/article/details/105513662