西北工业大学NOJ Python程序设计作业91-100

各位同学,创作不易,能否在文末打赏一瓶饮料呢?(^ _ ^)(文章末尾右下角处)
在这里插入图片描述

西北工业大学NOJ-Python程序设计作业题解集合:
NOJ-Python程序设计:第1季:水题(Season 1-Easy) (1-10)
NOJ-Python程序设计:第2季:小段代码(Season 2-Snippet) (11-20)
NOJ-Python程序设计:第3季:循环(Season 3-Loop) (21-30)
NOJ-Python程序设计:第4季:枚举算法(Season 4-Enumeration algorithm) (31-40)
NOJ-Python程序设计:第5季:模块化(Season 5-Modularization) (41-50)
NOJ-Python程序设计:第6季:字符串(Season 6-String) (51-60)
NOJ-Python程序设计:第7季:列表与元组(Season 7-List and Tuple) (61-70)
NOJ-Python程序设计:第8季:集合与字典(Season 8-Sets and Dictionary) (71-80)
NOJ-Python程序设计:第9季:类(Season 9-Class) (81-90)
NOJ-Python程序设计:第10季:挑战算法(Season 10-Challenges) (91-100)

第10季:挑战算法(Season 10-Challenges)(91-100)

西北工业大学NOJ Python程序设计作业91-100_第1张图片

前置知识点

这部分主要是运用前面的知识来实现算法题目,没有前置知识点。这部分题目比较简单,主要考察算法思路和代码规范。

镜像字符

西北工业大学NOJ Python程序设计作业91-100_第2张图片

镜像要求就是 o r d ( ′ a ′ ) + o r d ( ′ z ′ ) = o r d ( ′ b ′ ) + o r d ( ′ y ′ ) = . . . ord('a')+ord('z')=ord('b')+ord('y')=... ord(a)+ord(z)=ord(b)+ord(y)=...,所以算出 t = o r d ( ′ a ′ ) + o r d ( ′ z ′ ) t=ord('a')+ord('z') t=ord(a)+ord(z),然后从第 n − 1 n-1 n1位开始就要镜像交换字符,在此之前还是原字符。

t=ord('a')+ord('z')
s=input()
n=int(input())-1
ans=''
for i in range(len(s)):
    if(i<n):
        ans=ans+s[i]
    else:
        ans=ans+chr(t-ord(s[i]))
print(ans)
# Code By Phoenix_ZH

火柴棒

西北工业大学NOJ Python程序设计作业91-100_第3张图片

看图可以看出三角形数量: 1 + 2 + 3 + . . . + n 1+2+3+...+n 1+2+3+...+n,所以火柴棒数量就是 ( n + 1 ) ∗ n / 2 ∗ 3 (n+1)*n/2*3 (n+1)n/23

n=int(input())
ans=(n+1)*n//2*3
print(ans)
# Code By Phoenix_ZH

24小时格式

西北工业大学NOJ Python程序设计作业91-100_第4张图片

注意AM 12 转成24小时为00; PM 12 转成24小时仍为12。

l=input().split()
t=l[0].split(':')
if(t[0]=='12' and l[1]=='AM'):
    t[0]='00'
elif(t[0]!='12' and l[1]=='PM'):
    t[0]=str(int(t[0])+12)
print(':'.join(t))
# Code By Phoenix_ZH

数组旋转

西北工业大学NOJ Python程序设计作业91-100_第5张图片

将列表的 [ 0 : n ] [0:n] [0:n]加入到末尾,然后再将 [ 0 : n ] [0:n] [0:n]删除即可。或者进行遍历得到新的列表。

l=list(map(int,input().split()))
n=int(input())
for i in range(n):
    l.append(l[i])
del l[0:n]
l=map(str,l)
print(' '.join(l))
# Code By Phoenix_ZH

参考排序

西北工业大学NOJ Python程序设计作业91-100_第6张图片

创建字典,按照给定的列表对应得到键值对,然后调用sorted函数,并以value为关键字排序,得到的是list,然后通过dict()转换成字典,然后输出字典的所有键。

key=input().split()
value=input().split()
dic=dict(zip(key,value))
dic=dict(sorted(dic.items(),key=lambda x:(x[1])))
print(' '.join(dic.keys()))
# Code By Phoenix_ZH

Z字形输出

西北工业大学NOJ Python程序设计作业91-100_第7张图片

模拟Z字形的走位即可。

n=int(input())
a=[]
for i in range(n):
    a2=list(input().split())
    a.append(a2)
ans=[]
for i in range(n-1):
    ans.append(a[0][i])
for i in range(n):
    ans.append(a[i][n-i-1])
for i in range(1,n):
    ans.append(a[n-1][i])
print(' '.join(ans))
# Code By Phoenix_ZH

斐波那契序列倍数

西北工业大学NOJ Python程序设计作业91-100_第8张图片

构造斐波那契数列,一旦当前数是k的倍数就 n − = 1 n-=1 n=1,直到 n = 0 n=0 n=0,最后查看斐波那契数列的长度。

f=[0,1,1]
n,k=map(int,input().split())
while(n):
    x=f[len(f)-1]+f[len(f)-2]
    f.append(x)
    if(x%k==0):
        n-=1
print(len(f)-1)
# Code By Phoenix_ZH

匹配

西北工业大学NOJ Python程序设计作业91-100_第9张图片

题目很不清晰:一个字符串是否允许出现相同的字符?
如果保证了一个字符串中各个字符互不相同,那直接求交集即可,然后输出长度。于是我乱交了一发,AC了。数据很假
如果不保证互不相同,恐怕最简单的做法就是O(n^2)搜索一遍

l1,l2=input().split()
l1,l2=set(l1),set(l2)
l1=l1.intersection(l2)
print(len(l1))
# Code By Phoenix_ZH

最大元素

西北工业大学NOJ Python程序设计作业91-100_第10张图片

直接得到列表,然后直接线性遍历,更新maxx。或者直接sort也可以。

maxx=-1e9
l=list(map(int,input().split()))
for it in l:
    maxx=max(maxx,it)
print(maxx)
# Code By Phoenix_ZH

URL

西北工业大学NOJ Python程序设计作业91-100_第11张图片

需要构造正则表达式,然后在字符串st中调用findall函数,输出答案列表。

import re
st = input()
result=re.findall(r'(?:https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]', st)
print(result)
# Code By Phoenix_ZH

你可能感兴趣的:(python,算法)