(python)pat(basiclevel)practice刷题笔记(34-66)(代码片段)

z.volcano z.volcano     2022-12-25     541

关键词:

我的代码仅能解题,效率不高也不够简洁,欢迎师傅们提出建议,能让我加以改进。

1036 跟奥巴马一起编程 (15 分)

输入格式:

输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。

输出格式:

输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。

输入样例:

10 a

输出样例:

aaaaaaaaaa
a        a
a        a
a        a
aaaaaaaaaa
a,b=map(str,input().split())
if int(a)%2 ==0 :
    half = int(a)//2
else:
    half = int(a)//2+1
print(int(a)*b)
s=b+" "*(int(a)-2)+b
for i in range(half-2):
    print(s)
print(int(a)*b)

1037 在霍格沃茨找零钱 (20 分)

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱。

输入格式:

输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是 [0, 10
^​7​​ ] 区间内的整数,Sickle 是 [0, 17) 区间内的整数,Knut 是 [0, 29) 区间内的整数。

输出格式:

在一行中用与输入同样的格式输出哈利应该被找的零钱。如果他没带够钱,那么输出的应该是负数。

输入样例1:

10.16.27 14.1.28

输出样例1:

3.2.1

输入样例2:

14.1.28 10.16.27

输出样例2:

-3.2.1

x,y=map(str,input().split())
a,b,c=[],[],[]
s1=s2=s=0
flag=""
for i in x.split("."):
    a.append(int(i))
for i in y.split("."):
    b.append(int(i))
s1=a[0]*17*29+a[1]*29+a[2]
s2=b[0]*17*29+b[1]*29+b[2]
s=s2-s1
if s<0:
    flag+="-"
    s=s1-s2
c.append((s-s%493)//493)
c.append((s-c[0]*493-(s-c[0]*493)%29)//29)
c.append((s-c[0]*493)%29)
flag+=str(c[0])+"."+str(c[1])+"."+str(c[-1])
print(flag)

1038 统计同成绩学生 (20 分)

n=int(input())
d,flag=,[]
l=list(map(int,input().split()))
for i in l:
    d[i]=d.get(i,0)+1

lt=list(map(int,input().split()))
lt.pop(0)

for i in lt:
    try:
        flag.append(str(d[i]))
    except:
        flag.append('0')
print(" ".join(flag))

1039 到底买不买 (20 分)

a=list(input())
b=list(input())
n1=n2=0
for i in range(len(b)):
    if b[i] in a:
        a.remove(b[i])
    else:
        n2 += 1
if n2 == 0:
    print("Yes "+str(len(a)))
else:
    print("No "+str(n2))

1041 考试座位号 (15 分)

n=int(input())
lt=[]
for i in range(n):
    l=[]
    x,y,z=map(int,input().split())
    l.extend([x,y,z])
    lt.append(l)
m=int(input())
for i in map(int,input().split()):
    for j in lt:
        if j[1]==i:
            print(j[0],j[-1])

1042 字符统计 (20 分)

输入格式:

输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。

输出格式:

在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。

输入样例:

This is a simple TEST. There ARE numbers and other symbols 1&2&3…

输出样例:

e 7

s=input().lower()
d,l=,[]
for i in s:
    if i.isalpha():
        d[i]=d.get(i,0)+1
lt=list(d.items())
lt.sort(key=lambda x:x[-1],reverse=True)
max=lt[0][1]
for i in lt:
    if i[1]==max:
        l.append(i[0])
    else:
        break
print(min(l),max)

1043 输出PATest (20 分)

s=input()
flag=""
a=s.count('P')
b=s.count('A')
c=s.count('T')
d=s.count('e')
e=s.count('s')
f=s.count('t')
for i in range(max(a,b,c,d,e,f)):
    if a:
        flag+='P'
        a-=1
    if b:
        flag+='A'
        b-=1
    if c:
        flag+='T'
        c-=1
    if d:
        flag+='e'
        d-=1
    if e:
        flag+='s'
        e-=1
    if f:
        flag+='t'
        f-=1
print(flag)

1044 火星数字 (20 分)

火星人是以 13 进制计数的:

地球人的 0 被火星人称为 tret。
地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。
例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

输入格式:

输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

输出格式:

对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

输入样例:

4
29
5
elo nov
tam

输出样例:

hel mar
may
115
13

ge=["tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"]
shi=["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"]

def encode(n):
    flag=[]
    div=1
    while div:
        div,mod=divmod(n,13)
        flag.append(mod)
        n=div
    flag=flag[::-1]
    if len(flag)==1:
        print(ge[flag[0]])
    else:
        if flag[1]==0:
            print(shi[flag[0]-1])
        else:
            print(shi[flag[0]-1]+" "+ge[flag[1]])

def decode(s):
    l=list(s.split())
    if len(l) == 1:
        if s in ge:
            print(ge.index(s))
        else:
            print(13*(shi.index(s)+1))
    else:
        x=13*(shi.index(l[0])+1)
        y=ge.index(l[1])
        print(x+y)

n=eval(input())
for i in range(n):
    s=input()
    if s.isnumeric():
        encode(eval(s))
    else:
        decode(s)

1046 划拳 (15 分)

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。

输入格式:

输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为:
甲喊 甲划 乙喊 乙划
其中喊是喊出的数字,划是划出的数字,均为不超过 100 的正整数(两只手一起划)。

输出格式:

在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。

输入样例:

5
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15

输出样例:

1 2

n=int(input())
x,y=0,0
for i in range(n):
    a,b,c,d=map(int,input().split())
    e=a+c
    if b!=e and d!=e or b==d==e:
        pass
    elif b==e and d!=e:
        y+=1
    else:
        x+=1
print(str(x)+" "+str(y))

1047 编程团体赛 (20 分)

n=int(input())
bian,score=[],[]
for i in range(n):
    s=input().split()
    x=s[0].split("-")
    if x[0] not in bian:
        bian.append(x[0])
        score.append(int(s[1]))
    else:
        score[bian.index(x[0])]+=int(s[1])
print(bian[score.index(max(score))]+" "+str(max(score)))

1048 数字加密 (20 分)

题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118

m,n=map(str,input().split())
x=max(len(n),len(m))
m=m.zfill(x)[::-1]
n=n.zfill(x)[::-1]
l,d=[],10:"J",11:"Q",12:"K"

for i in range(len(n)):
    if (i+1)%2==1:
        y=(int(m[i])+int(n[i]))%13
        l.append(y)
    elif (i+1)%2==0 and int(n[i])-int(m[i])<0:
        y=int(n[i])-int(m[i])+10
        l.append(y)
    else:
        y=int(n[i])-int(m[i])
        l.append(y)
l.reverse()
for i in l:
    if i < 10:
        print(i,end="")
    else:
        print(d[i],end="")

1049 数列的片段和 (20 分)

给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 0.1, 0.2, 0.3, 0.4 ,我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。

给定正整数数列,求出全部片段包含的所有的数之和。如本例中 10 个片段总和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

输入格式:

输入第一行给出一个不超过 100000的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以空格分隔。

输出格式:

在一行中输出该序列所有片段包含的数之和,精确到小数点后 2 位。

输入样例:

4
0.1 0.2 0.3 0.4

输出样例:

5.00

这里分析数组中的每一位分别被加了几次,以输入样例为例,第一位被加了4次,第二位被加了(4-1)+3=6次,第三位被加了(4-2)+(3-1)+2=6次,第四位被加了(4-3)+(3-2)+(2-1)+1=4次。

对应次数满足1*4 2*3 3*2 4*1

按照这个规律写代码,不过要注意测试点2,因为浮点数的计算是不精准的,我开始是对计算得到的结果进行精度处理,还是通不过,意识到问题出在前面求和的过程中,上网搜索解决方法,决定使用python中的decimal模块

from decimal import Decimal
n = int(input())
l = tuple(map(Decimal, input().split()))
he = 0

if n == (python)pat(basiclevel)practice刷题笔记(34-66)(代码片段)

我的代码仅能解题,效率不高也不够简洁,欢迎师傅们提出建议,能让我加以改进。Practice1036跟奥巴马一起编程(15分)1037在霍格沃茨找零钱(20分)1038统计同成绩学生(20分)1039到底买不买(20分)1041考试座位号(15分)1042字符... 查看详情

pat(basiclevel)1004(代码片段)

#include<iostream>#include<string>usingnamespacestd;structstudentstringname;stringnumber;intscore;;intmain()intn;cin>>n;studenta[n];intmax=0;intmin=100;intmaxnum,minnum;for(inti=0 查看详情

pat(basiclevel)1006(代码片段)

1#include<iostream>23usingnamespacestd;45intmain()67intn;8cin>>n;910if(n<10)11for(inti=1;i<=n;i++)12cout<<i;1314elseif(n<100&&n>10)15inti=n/10;16intj=n%10;17f 查看详情

pat(basiclevel)practice(中文)1002

1002 写出这个数 (20分)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数 n 的值。这里保证 n 小于 10?100??。输出... 查看详情

**pat(basiclevel)1012数字分类(代码片段)

 我的错误代码:1#include<iostream>2#include<iomanip>34usingnamespacestd;56intmain()78intN;9cin>>N;1011intn;12intj=1;13intsum0=0,yu0=0,sum1=0,yu1=0,yu2=0,yu3=0,sum3=0,max4=-1,yu4=0;14f 查看详情

pat乙级(basiclevel)真题训练(代码片段)

写在前面:PAT冬季赛马上就要开始了!??这一次先报一个乙级冲鸭!我感Jio乙级里面还是有蛮多水题的,也有些题虽然看上去是水题,但是真正用代码实现起来的话会卡你那么一下,比如第5题数素数真的神打脸。天上不会掉馅饼... 查看详情

pat(basiclevel)practice(中文)1002写出这个数(代码片段)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。1#include<stdio.h>2intmain()3charc;4intsumt=0,t[10],count,i;5scanf("%c",&c);6while(c!=‘ 查看详情

pat(basiclevel)1005(有空请改进)(代码片段)

1005 继续(3n+1)猜想 (25分) 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 ... 查看详情

1003我要通过!|pat(basiclevel)practice(代码片段)

1003我要通过!(20分)“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条... 查看详情

pat(basiclevel)practise水题1~10

1001.害死人不偿命的(3n+1)猜想(15)卡拉兹(Callatz)猜想:对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家... 查看详情

java1004成绩排名(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

前言学得越多,不会得越多种一颗树的最佳时间是十年前,其次就是现在pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/233zzh/PATqq交流群:1107710098题目:1004成绩排名(20分)读入n&... 查看详情

java1003我要通过!(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

你是最棒的前言前言题目:1003我要通过!(20分)思路代码前言学得越多,不会得越多种一颗树的最佳时间是十年前,其次就是现在pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/... 查看详情

java1003我要通过!(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

你是最棒的前言前言题目:1003我要通过!(20分)思路代码前言学得越多,不会得越多种一颗树的最佳时间是十年前,其次就是现在pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/... 查看详情

pat(basiclevel)practicec++解题过程(暴躁版)(代码片段)

暴躁小丁开始准备刷PAT,虽然咱是菜鸡一个,整个一摸眼黑,但是有勇气谁都了不起,记录开始,这是一个浙江大学的刷题网站,有兴趣的宝宝可以和俺老丁一起!链接:https://pintia.cn/problem-sets/9948... 查看详情

pat(basiclevel)practicec++解题过程(暴躁版)(代码片段)

暴躁小丁开始准备刷PAT,虽然咱是菜鸡一个,整个一摸眼黑,但是有勇气谁都了不起,记录开始,这是一个浙江大学的刷题网站,有兴趣的宝宝可以和俺老丁一起!链接:https://pintia.cn/problem-sets/9948... 查看详情

java1005继续(3n+1)猜想(25分)pat乙级pat(basiclevel)practice(中文)(代码片段)

前言学得越多,不会得越多种一颗树的最佳时间是十年前,其次就是现在pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/233zzh/PATqq交流群:1107710098题目:1005继续(3n+1)猜想(25... 查看详情

java1007素数对猜想(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

你是最棒的前言题目:1007素数对猜想(20分)要点:代码前言学得越多,不会得越多种一颗树的最佳时间是十年前,其次就是现在pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/233... 查看详情

pat(basiclevel)practice1021个位数统计(代码片段)

个人练习 给定一个 k 位整数 N=d?k?1??10?k?1??+?+d?1??10?1??+d?0?? (0≤d?i??≤9, i=0,?,k?1, d?k?1??>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有2个0,3个1,和1个3。输入格式:... 查看详情