PTA 基础题练习7

1. 正整数A+B

求两个正整数AB的和,其中AB都在区间[1,1000]。输入不保证是两个正整数。

输入格式:

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?
def check(s):
	"""检查是否全是数字"""
    numbers = '0123456789'
    flag = True
    for i in s:
        if i not in numbers:
            flag = False
            break
    return flag


str1 = input().strip()
a = str1[:str1.find(' ')]
b = str1[str1.find(' ') + 1:]
# print(a)
# print(b)
a = a if (check(a) and (1 <= int(a) <= 1000)) else '?'
b = b if (check(b) and (1 <= int(b) <= 1000)) else '?'
# print(a)
# print(b)
ans = str(int(a) + int(b)) if (check(a) and check(b)) else '?'
print(f'{a} + {b} = {ans}')

2. 出租

下面是新浪微博上曾经很火的一张图:
在这里插入图片描述
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1index[1]=0 对应 arr[0]=8index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式:

输入在一行中给出一个由11位数字组成的手机号码。

输出格式:

为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

输入样例:

18013820100

输出样例:

int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
phone = input().strip()
# 转列表
numbers = [int(i) for i in list(phone)]
# print(numbers)
# 去重
arr = list(set(numbers))
# print(arr)
# 降序排序
arr = sorted(arr, reverse=True)
# print(arr)
# 创建字典,以数组中的元素为键,索引为值
dict_arr = {arr[i]:i for i in range(len(arr))}
index = []
for num in numbers:
    index.append(dict_arr[num])
# print(index)
# 转字符串
arr_str = ','.join(map(str, arr))
index_str = ','.join(map(str, index))
str1 = "int[] arr = new int[]{%s};" % arr_str
str2 = "int[] index = new int[]{%s};" % index_str
print(str1)
print(str2)

3. 一帮一

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:

输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:

每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例:

Amy Jack
Tom Linda
Bill Maya
Cindy John
n = int(input())
list_stu = []
for i in range(n):
    input_list = input().strip().split(' ')
    sex, name = input_list[0], input_list[1]
    list_stu.append([sex, name])
# print(list_stu)
dict_group = {}
# 前半部分
for i in range(int(n/2)):
    # print(i)
    # 后半部分
    for j in range(n-1, int(n/2)-1, -1):
        # print(j)
        if list_stu[j][0] != list_stu[i][0]:
            if list_stu[i][1] not in dict_group.keys() and list_stu[j][1] not in list(dict_group.values()):
                dict_group[list_stu[i][1]] = list_stu[j][1]
# print(dict_group)
for k,v in dict_group.items():
    print(f'{k} {v}')

4. 到底是不是太胖了

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

输入格式:

输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。

输出格式:

为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!

输入样例:

3
169 136
150 81
178 155

输出样例:

You are wan mei!
You are tai shou le!
You are tai pang le!
#include <stdio.h>
#include <math.h>

int main()
{
    int n;
    int height, weight;
    float standard;
    scanf("%d", &n);
    while(n--)
    {
        scanf("%d %d", &height, &weight);
        standard = (height - 100) * 0.9 * 2;
        float gap = weight - standard;
        // 判断是否为完美身材
        if (fabs(gap) < standard * 0.1)
        {
            printf("You are wan mei!\n");
        }else if (gap >= standard * 0.1)
        {
            printf("You are tai pang le!\n");
        }else{
            printf("You are tai shou le!\n");
        }
    }
    return 0;
}

5. 吃火锅

本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1

输入格式:

输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点 . 时,输入结束,此行不算在朋友信息里。

输出格式:

首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。

如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 -_-#

输入样例 1:

Hello!
are you there?
wantta chi1 huo3 guo1?
that's so li hai le
our story begins from chi1 huo3 guo1 le
.

输出样例 1:

5
3 2

输入样例 2:

Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that's so li hai le
our story begins from ci1 huo4 guo2 le
.

输出样例 2:

5
-_-#
messages = []
key_words = 'chi1 huo3 guo1'
while True:
    msg = input().strip()
    if msg == '.':
        break
    messages.append(msg)
total = len(messages)
first_appear = -1
count_appear = 0
for i in range(total):
	# 判断是否出现关键词
    if key_words in messages[i]:
        first_appear = i+1
        break
for i in range(total):
    if key_words in messages[i]:
        count_appear += 1
print(total)
if first_appear == -1 and count_appear == 0:
    print('-_-#')
else:
    print(f'{first_appear} {count_appear}')

6. 强迫症

小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。

输入格式:

输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。

输出格式:

在一行中按标准格式 年年年年-月月 将输入的信息整理输出。

输入样例 1:

9808

输出样例 1:

1998-08

输入样例 2:

0510

输出样例 2:

2005-10

输入样例 3:

196711

输出样例 3:

1967-11
date = input().strip()
year = ""
if len(date) == 4:
    year = date[:2]
    if int(year) < 22:
        year = '20' + year
    else:
        year = '19' + year
else:
    year = date[:4]
month = date[-2:]
print(f'{year}-{month}')

7. 降价提醒机器人

小 T 想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小 T 写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。

输入格式:

输入第一行是两个正整数 NM (1≤N≤100,0≤M≤1000),表示有 N 条价格记录,小 T 设置的价格为 M

接下来 N 行,每行有一个实数 Pi(−1000.0<Pi<1000.0),表示一条价格记录。

输出格式:

对每一条比设定价格 M 便宜的价格记录 P,在一行中输出 On Sale! P,其中 P 输出到小数点后 1 位。

输入样例:

4 99
98.0
97.0
100.2
98.9

输出样例:

On Sale! 98.0
On Sale! 97.0
On Sale! 98.9
n, m = map(int, input().strip().split())
for i in range(n):
    price = float(input().strip())
    if price < m:
        print('On Sale! {:.1f}'.format(price))

8. 大笨钟的心情

替大笨钟写一个程序,根据心情自动输出回答。

输入格式:

输入在一行中给出 24 个 [0, 100] 区间内的整数,依次代表大笨钟在一天 24 小时中,每个小时的心情指数。

随后若干行,每行给出一个 [0, 23] 之间的整数,代表网友询问笨钟这个问题的时间点。当出现非法的时间点时,表示输入结束,这个非法输入不要处理。题目保证至少有 1 次询问。

输出格式:

对每一次提问,如果当时笨钟的心情指数大于 50,就在一行中输出 心情指数 Yes,否则输出 心情指数 No

输入样例:

80 75 60 50 20 20 20 20 55 62 66 51 42 33 47 58 67 52 41 20 35 49 50 63
17
7
3
15
-1

输出样例:

52 Yes
20 No
50 No
58 Yes
mood = [int(i) for i in input().strip().split()]
dict_mood = {str(i):mood[i] for i in range(len(mood))}
while True:
    ask = int(input().strip())
    if ask < 0 or ask > 23:
        break
    mood_value = dict_mood[str(ask)]
    flag = 'Yes' if mood_value > 50 else 'No'
    print(f'{mood_value} {flag}')

9. 吉老师的回归

吉老师会按照顺序看题并做题。但假如题目的字符串里有 qiandao 或者 easy(区分大小写)的话,吉老师看完题目就会跳过这道题目不做。

现在给定这次天梯赛总共有几道题目以及吉老师已经做完了几道题目,请你告诉大家吉老师现在正在做哪个题,或者吉老师已经把所有他打算做的题目做完了。

输入格式:

输入第一行是两个正整数 N,M (1≤MN≤30),表示本次天梯赛有 N 道题目,吉老师现在做完了 M 道。

接下来 N 行,每行是一个符合题目描述的字符串,表示天梯赛的题目内容。吉老师会按照给出的顺序看题——第一行就是吉老师看的第一道题,第二行就是第二道,以此类推。

输出格式:

在一行中输出吉老师当前正在做的题目对应的题面(即做完了 M 道题目后,吉老师正在做哪个题)。如果吉老师已经把所有他打算做的题目做完了,输出一行 Wo AK le

输入样例 1:

5 1
L1-1 is a qiandao problem.
L1-2 is so...easy.
L1-3 is Easy.
L1-4 is qianDao.
Wow, such L1-5, so easy.

输出样例 1:

L1-4 is qianDao.

输入样例 2:

5 4
L1-1 is a-qiandao problem.
L1-2 is so easy.
L1-3 is Easy.
L1-4 is qianDao.
Wow, such L1-5, so!!easy.

输出样例 2:

Wo AK le
n, m = map(int, input().strip().split())
list_problems = []
key_words = ['qiandao', 'easy']
for i in range(n):
    problem = input().strip()
    if problem.count(key_words[0]) == 0 and problem.count(key_words[1]) == 0:
        list_problems.append(problem)
# print(list_problems)
if len(list_problems) <= m:
    print("Wo AK le")
else:
    print(list_problems[m])

10. 天梯赛的善良

天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。

于是命题组首先将编程能力划分成了 106 个等级,然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。

输入格式:

输入在第一行中给出一个正整数 N(≤2×104),即参赛学生的总数。随后一行给出 N 个不超过 106 的正整数,是参赛学生的能力值。

输出格式:

第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

10
86 75 233 888 666 75 886 888 75 666

输出样例:

75 3
888 2
n = int(input().strip())
max_ability = 0
min_ability = 1000000
abilities = [int(i) for i in input().strip().split()]
for num in abilities:
    if num > max_ability:
        max_ability = num
    if num < min_ability:
        min_ability = num
print(f'{min_ability} {abilities.count(min_ability)}')
print(f'{max_ability} {abilities.count(max_ability)}')

11. 谁能进图书馆

为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。

输入格式:

输入在一行中给出 4 个整数:

禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄

这里的禁入年龄线是指严格小于该年龄的儿童禁止入馆;陪同年龄线是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为 12;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证 陪同年龄线 严格大于 禁入年龄线

输出格式:

在一行中输出对两位询问者的回答,如果可以进就输出 年龄-Y,否则输出 年龄-N,中间空 1 格,行首尾不得有多余空格。

在第二行根据两个询问者的情况输出一句话:

  • 如果两个人必须一起进,则输出 qing X zhao gu hao Y,其中 X 是陪同人的编号, Y 是小孩子的编号;
  • 如果两个人都可以进但不是必须一起的,则输出 huan ying ru guan
  • 如果两个人都进不去,则输出 zhang da zai lai ba
  • 如果一个人能进一个不能,则输出 X: huan ying ru guan,其中 X 是可以入馆的那个人的编号。

输入样例 1:

12 18 18 8

输出样例 1:

18-Y 8-Y
qing 1 zhao gu hao 2

输入样例 2:

12 18 10 15

输出样例 2:

10-N 15-Y
2: huan ying ru guan
min_need, min_with, ask1, ask2 = map(int, input().strip().split())
# 如果两个人都进不去,则输出 zhang da zai lai ba
if ask1 < min_need and ask2 < min_need:
    print(f'{ask1}-N {ask2}-N')
    print("zhang da zai lai ba")
# 如果两个人都可以进但不是必须一起的,则输出 huan ying ru guan
if ask1 >= min_need and ask2 >= min_need:
    print(f'{ask1}-Y {ask2}-Y')
    print("huan ying ru guan")
# 如果两个人必须一起进,则输出 qing X zhao gu hao Y
if ask1 >= min_with and ask2 < min_need:
    print(f'{ask1}-Y {ask2}-Y')
    print("qing 1 zhao gu hao 2")
if ask1 < min_need and ask2 >= min_with:
    print(f'{ask1}-Y {ask2}-Y')
    print("qing 2 zhao gu hao 1") 
# 如果一个人能进一个不能,则输出 X: huan ying ru guan
if min_need <= ask1 < min_with and ask2 < min_need:
    print(f'{ask1}-Y {ask2}-N')
    print("1: huan ying ru guan")
if ask1 < min_need and min_need <= ask2 < min_with:
    print(f'{ask1}-N {ask2}-Y')
    print("2: huan ying ru guan") 

12. 拯救外星人

你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。

本题就请你写程序模仿外星人的行为。

输入格式:

输入在一行中给出两个正整数 A 和 B。

输出格式:

在一行中输出 (A+B) 的阶乘。题目保证 (A+B) 的值小于 12。

输入样例:

3 6

输出样例:

362880
def fact(n):
    ans = 1
    for i in range(2, n+1):
        ans *= i
    return ans

a, b = map(int, input().strip().split())
print(fact(a+b))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值