openjudge程序设计与实践python解题大全

        该题库是程序设计实习MOOC的python题库,一共94题的答案,建议先自己尝试再看答案,题目链接如下:OpenJudge – OpenJudgehttp://cxsjsxmooc.openjudge.cn/book/

001:A+B问题

A=input()
B=A.split(' ',1)
print(int(B[0])+int(B[1]))

002:字符三角形

a=input()
A="{:^5}".format(a)
B="{0:>2}{1:<3}".format(a, a*2)
C="{:^5}".format(a*5)
print(A)
print(B)
print(C)

003:计算(a+b)*c的值

A=input()
B=A.split(' ',2)
print((int(B[0])+int(B[1]))*int(B[2]))

004:反向输出一个三位数

A=input()
print(A[::-1])

005:字符菱形

a=input()
A="{:^5}".format(a)
B="{0:>2}{1:<3}".format(a, a*2)
C="{:^5}".format(a*5)
print(A)
print(B)
print(C)
print(B)
print(A)

006:输出第二个整数

A=input()
B=A.split(' ',2)
print(B[1])

007:求三个数的和

A=input()
B=A.split(' ',2)
a1=float(B[0])
a2=float(B[1])
a3=float(B[2])
s=a1+a2+a3
if s==int(s):
  C="{:.1f}".format(s)
  print(C)
else:
  print(s)

008:字符串交换

A=input()
B=input()
print(B[0]+B[1]+A[2]+A[3])
print(A[0]+A[1]+B[2]+B[3])

009:字符串中的整数求和

A=input()
B=A.split(' ',1)
C=B[0]
D=B[1]
print(int(C[0:2])+int(D[0:2]))

010:求(x+y)*x的值

A=input()
B=A.split(' ',1)
a1=float(B[0])
a2=float(B[1])
s=(a1+a2)*a1
print("{:.5f}".format(s))

011:奇偶数判断

A=int(input())
if A%2==0:
    print('even')
else:
    print('odd')

012:判断子串

A=input()
B=input()
if B.find(A)==-1:
    print('NO')
else:
    print('YES')

013:三角形判断

A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
if a1+a2>a3 and a1+a3>a2 and a2+a3>a1:
    print('yes')
else:
    print("no")

014:简单计算器

A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=B[2]
if a3=='+':
    print(a1+a2)
elif a3=='-':
    print(a1-a2)
elif a3=='*':
    print(a1*a2)
elif a3 == '/':
    if a2==0:
        print('Divided by zero!')
    else:
        print(a1//a2)
else:
    print('Invalid operator!')

015:摄氏华氏温度转换

import decimal
A=input()
B=A[::-1]
a=A[0:len(A)-1]
x1=decimal.Decimal(a)
x2=decimal.Decimal('32')
x3=decimal.Decimal('1.8')
if B[0]=='F' or B[0]=='f':
    d=(x1-x2)/x3
    if int(d)==d:
        e="{:^}".format(int(d))
    else:
        e="{:.2f}".format(d)
    print(str(e)+'C')
else:
    d=x1*x3+x2
    if int(d)==d:
        e="{:^}".format(int(d))
    else:
        e="{:.2f}".format(d)
    print(str(e)+'F')

016:幸运的年份

A=int(input())
if (A-1949)%10==0:
    print('Lucky year')
elif (A-1921)%10==0:
    print('Good year')
elif A%400==0 or (A%4==0 and A%100>0):
    print('Leap year')
elif A>0:
    print('Common year')
else:
    print('Illegal year')

017:计算2的幂

a=int(input())
print(2**a)

018:计算多项式的值

A=input()
B=A.split(' ',4)
x=float(B[0])
a=float(B[1])
b=float(B[2])
c=float(B[3])
d=float(B[4])
y=a*(x**3)+b*(x**2)+c*x+d
print("{:.7f}".format(y))

019:车牌限号

A=input()
B=A[::-1]
c=int(B[0])
if c%2==0:
  print('NO')
else:
  print('YES')

020:点和正方形的关系

A=input()
B=A.split(' ',1)
if abs(eval(B[0]))<=1 and abs(eval(B[1]))<=1:
  print('yes')
else:
  print('no')

021:计算邮资

import math
A=input()
B=A.split(' ',1)
if int(B[0])<=1000:
  p=8
else:
  a1=int(B[0])-1000
  n=math.ceil(a1/500)
  p=8+4*n
if B[1]=='y':
  p+=5
print(p)

022:分段函数

A=input()
x=float(A)
y=(-x+2.5 if 0<=x<5 else
   2-1.5*(x-3)*(x-3) if 5<=x<10 else
   x/2-1.5)
print("{:.3f}".format(y))

023:大象喝水

import math
A=input()
B=A.split(' ',1)
a1=int(B[0])
a2=int(B[1])
V=3.14159*a1*a2*a2
n=math.ceil(20000/V)
print(n)

024:苹果和虫子2

import math
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
n=math.ceil(a3/a2)
if a1-n>=0:
  print(a1-n)
else:
  print(0)

025:求一元二次方程的根

A=input()
B=A.split(' ',2)
a=float(B[0])
b=float(B[1])
c=float(B[2])
d=b*b-4*a*c
if d>0:
    x1=(-b+d**0.5)/(2*a)
    x2 =(-b-d ** 0.5) /(2*a)
    X1=max(x1,x2)
    X2=min(x1,x2)
    print("x1={:.5f};x2={:.5f}".format(X1,X2))
elif d<0:
    r=-b/(2*a)
    x1 = (-d) ** 0.5/ (2 * a)
    if -r==r:
        r=0
    print("x1={:.5f}+{:.5f}i;x2={:.5f}-{:.5f}i".format(r,x1,r,x1))
else:
    r = -b / (2 * a)
    print("x1=x2={:.5f}".format(r))

026:输入n个整数求和

a=0
n=input()
for i in range(int(n)):
  a1=input()
  b=int(a1)
  a=b+a
print(a)

027:从小到大输出正整数n的因子

n=input()
a=[]
for i in range(int(n)):
  if (int(n))%(i+1)==0:
     print(i+1,end=' ')

028:多次求n个数的和

m=input()
for i in range(int(m)):
  n=input()
  a=0
  for j in range(int(n)):
    a1=input()
    b=int(a1)
    a=b+a
  print(a)

029:字符直角三角形

A=input()
B=A.split(' ',2)
for i in range(int(B[1])):
  print(B[0]*(i+1))

030:多少种和为因子的取法

A=input()
a=0
B=A.split(' ',1)
a1=int(B[0])
a2=int(B[1])
for i in range(a1):
  for j in range(a1):
    b1=i+1
    b2=j+1
    if a2/(b1+b2)>=1 and a2%(b1+b2)==0 and b1<b2:
      print(b1,b2)
      a+=1
print(a)

031:寻找子串

A=input()
B=input()
C=B.replace(' ','')
c=A.find(C)
print(c)

032:求最小公倍数

A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
n=a1*a2*a3
for i in range(n):
  c=i+1
  if c%a1==0 and c%a2==0 and c%a3==0:
    print(c)
    break

033:十进制数转二进制数

number = int(input())
binnum = bin(number)
if number>0:
  print(binnum[2:])
elif number==0:
  print(0)
else:
  print('-'+binnum[3:])

034:求最大整数

# 输入若干行,每行若干整数,求所有整数的最大值
s=input().split()
maxV = eval(s[0])
try:
    while True:
        for x in s:
            maxV = max(maxV, int(x))
        s = input().split()  # 输入数据已经没有了还执行input,会产生异常
except:  # pycharm里Ctrl+D表示输入结束
    pass  # pass语句啥都不做,就是玩儿(你可以省略试试)
print(maxV)

035:求斐波那契数列第k项

A=int(input())
B=[0]*46
for i in range(A):
    if i<=1:
        B[i]=1
    else:
        B[i]=B[i-1]+B[i-2]
print(B[i])

036:求阶乘的和

import math
s=0
n = int(input())
for i in range(n):
  a=math.factorial(i+1)
  s=s+a
print(s)

037:求不大于n的全部质数

A=int(input())
if A>2:
  for i in range(2,A+1):
      for x in range(2,i):
          if i%x==0:
             break
      else:
          print(i,end=' ')
else:
    print(2)

038:角谷猜想

n = int(input())
while n != 1:
    if n % 2:
        print(str(n)+'*3+1='+str(n*3+1))
        n = n*3 + 1
    else:
        print(str(n)+'/2='+str(n//2))
        n = n // 2
print('End')

039:数字统计

A=input()
B=A.split(' ',1)
s=0
for i in range(int(B[0]),int(B[1])+1):
    a=str(i)
    c=a.count('2')
    s+=c
print(s)

040:求整数的和与均值

A=input()
B=int(A)
s=0
for i in range(B):
    C=int(input())
    s=s+C
print("{:^} {:.5f}".format(s,s/B))

041:整数序列的元素最大跨度值

A=int(input())
B=input()
B1=B.split(' ',A)
a1=a2=int(B1[0])
for i in range(A):
  a3=int(B1[i])
  a1=max(a3,a1)
  a2=min(a3,a2)
print(a1-a2)

042:毕业生年薪统计

A=int(input())
B=input()
a=0
B1=B.split(' ',A)
for i in range(A):
  a3=int(B1[i])
  if a3>=30:
    a+=1
print(a)

043:奥运奖牌计数

A=int(input())
s1=s2=s3=0
for i in range(A):
  B=input()
  B1=B.split(' ',3)
  s1=s1+int(B1[0])
  s2=s2 + int(B1[1])
  s3=s3 + int(B1[2])
S=s1+s2+s3
print(s1,s2,s3,S)

044:鸡尾酒疗法

A=int(input())
A1=[0]*A
for i in range(A):
  B=input()
  B1=B.split(' ',2)
  A1[i]=int(B1[1])/int(B1[0])
for i in range(A-1):
  if A1[i+1]-A1[0]>0.05:
    print('better')
  elif A1[0]-A1[i+1]>0.05:
    print('worse')
  else:
    print('same')

045:正常血压

A=int(input())
c=0
s=0
for i in range(A):
  B=input()
  B1=B.split(' ',2)
  a1=int(B1[0])
  a2 = int(B1[1])
  if 90<=a1<=140 and 60<=a2<=90:
      c+=1
      if c>s:
        s=c
  else:
      c=0
print(s)

046:数字反转

A=input()
A1=int(A)
if A1>0:
    b=A[::-1]
    for i in range(len(A)):
      if b[i]=='0' and b[i+1]>'0' and b[0]=='0':
        d=i+1
        break
      else:
        d=0
    print(b[d:])
else:
    A=A[1:]
    b = A[::-1]
    for i in range(len(A)):
        if b[i] == '0' and b[i + 1] > '0' and b[0] == '0':
            d = i + 1
            break
        else:
            d = 0
    print(-int(b[d:]))

047:求特殊自然数

for i in range(401,1000):
    a=str(i)
    b=int(a[0])
    c=int(a[1])
    d=int(a[2])
    e1=b*49+c*7+d
    e2=d*81+c*9+b
    if e1==e2:
      print(e1)
      print(a)
      print(a[::-1])
      break

048:字符计数

A=int(input())
for i in range(A):
    a=input()
    b=input().split()
    for j in range(len(b)):
        c=b[j].upper()
        d=c.count(a.upper())
        if j==len(b)-1:
            print(d,end='
')
        else:
            print(d,end=' ')

049:八皇后问题

def fanzhuan(board):
    board1=[0]*len(board)
    for i, t in enumerate(board):
        board1[t]=i
    return board1

# 检查当前位置是否可以放置 Queen
def check(board, row, col):
    for i in range(row):
        # 不在同一列 不在同一对角线
        if abs(board[i] - col) == 0 or abs(board[i] - col) == abs(i - row):
            return False
    return True


def eightQueen(board, row):
    # 皇后个数
    global s
    border = len(board)
    # 当 row >= border 时,代表此时每行都能摆放皇后,即获得解法
    if row >= border:
        s=s+1
        print("No. "+str(s))
        board=fanzhuan(board)
        for i, col in enumerate(board):
            print('0 ' * col + '1 ' + '0 ' * (len(board) - 1 - col))
    # 逐列遍历
    for col in range(border):
        if check(board, row, col):
            # board 的key代表皇后保存的row,value代表皇后保存的col
            board[row] = col
            eightQueen(board, row + 1)


_board = [0 for i in range(8)]
global s
s=0
eightQueen(_board, 0)

050:上台阶

def taijie(n):
    if n==1:
        return 1
    elif n==2:
        return 2
    else:
        return taijie(n-1)+taijie(n-2)
print(taijie(int(input())))

051:汉诺塔问题

def taijie(n,x="A",y="B",z="C"):
    if n==1:
        print("{}->{}".format(x,z))
    else:
        taijie(n-1,x,z,y)
        print("{}->{}".format(x,z))
        taijie(n - 1, y, x, z)
taijie(int(input()))

052:N皇后问题

# 确认最后的基线及迭代条件
def FoundQueen(List1, m):
    for var1 in range(m):
        if not conflict(List1, var1):
            if len(List1) == m - 1:
                yield [var1];
            else:
                List2 = (List1 + [var1]).copy();
                for result in FoundQueen(List2, m):
                    yield [var1] + result;
# 确认冲突的条件
def conflict(list1, y):
    len1 = len(list1)
    for var in range(len1):
        if y == list1[var] or abs(y - list1[var]) == abs(len1 - var):
            return True;
    return False;
aa=int(input())
if aa==2 or aa==3:
    print('NO ANSWER')
else:
    queens = list(FoundQueen([],aa))
    a=len(queens)
    b=len(queens[0])
    for i in range(a):
       for j in range(b):
          print(queens[i][j],end=" ")
       print("")

053:求最大公约数问题

A=input()
B=A.split(' ',1)
a1=max(int(B[0]),int(B[1]))
a2=min(int(B[0]),int(B[1]))
while a1%a2>0:
    c=a1%a2
    a1=a2
    a2=c
print(a2)

054:递归复习法

def fuxi(B):
    if B==1:
        return 1
    elif B == 2:
        return 2
    else:
        return fuxi(B-1)+fuxi(B-2)+B
A=int(input())
for i in range(A):
    B=int(input())
    print(fuxi(B))

055:多少种取法

def ways(m, n, s):
    # 第一类,各种特殊情况
    if s < 0 or n < 0 or m <= 0:  # 当输入数据小于0时,取法为0
        return 0
    elif n == 0 and s == 0:  # 当n==0且s==0时,只有1种取法
        return 1
    elif n == 0 and s > 0:  # 当取0个,但是s>0时,取法为0
        return 0
    elif n == 1:  # 判断n=1的情况
        if m >= s:
            return 1  # 若m>=s,只有1种取法
        else:
            return 0  # 若m<s,则取法为0
    elif m >= n and s == 0:  # 当m>=n 并且 s=0时 ,只有1种取法
        return 1
    elif n > 1 and s == 1:  # 当n>1且s=0时 ,取法为0
        return 0

    # 第二类,讨论大类
    elif m > s:  # 当m>s时
        if n == s or n > s:
            return 0
        elif 1 < n < s:
            return ways(s - 1, n, s)
    elif m < s:  # 当m<s时
        return ways(m - 1, n - 1, s - m) + ways(m - 1, n, s)  # 当取m时 与 不取m时 的和
    elif m == s:  # 当m=s时
        if n > m:
            return 0
        else:
            return ways(m - 1, n, s)


t = eval(input())  # t组数
for i in range(t):
    m, n, s = map(int, input().split())
    print(ways(m, n, s))

056:分解因数

def DFS(n, m):
    count = 0
    if n == 1:
        return 1
    i = m
    while i <= n:
        if n % i == 0:
            count += DFS(n // i, i)
        i += 1

    return count

t = int(input())

while t != 0:
    n = int(input())
    print(DFS(n, 2))
    t -= 1

057:全排列

#求出num_list中各个数字的全排列,结果是各个排列组成的列表。
def quanpailie(num_list):
    if len(num_list) == 0:
        return []
    if len(num_list) == 1:
        return [num_list]  #只有1个数字的情形。注意:结果是列表的列表

    pailie_list = []
    for i in range(len(num_list)):  #对于num_list中的每个数字
    	#得到以第 i 个数字打头的排列
        num_list_pop_i = num_list[:]  #[:]不能省略。作用是复制一份列表。
        num = num_list_pop_i.pop(i)  #从num_list中取出第i个数字
        #得到第i个数字打头的所有排列 = 打头数字 + num_list_pop_i的全排列
        for qpl in quanpailie(num_list_pop_i):  #对于num_list_pop_i的全排列中的每一个排列
            qpl.insert(0, num)  #该排列的头部加上打头数字
            pailie_list.append(qpl)  #得到num_list的一个排列
    return pailie_list


A=input()
B=[]
for i in range(len(A)):
    B.append(A[i])
C=quanpailie(B)
for i in range(len(C)):
    s = "".join(C[i])
    print(s,end="
")

058:校门外的树

A=input()
B=A.split(' ',1)
C=[0]*(int(B[0])+1)
for i in range(int(B[1])):
    a = input()
    b = a.split(' ', 1)
    for j in range(int(B[0])+1):
      if int(b[0])<=j<=int(b[1]):
        C[j]=1
print(int(B[0])+1-sum(C))

059:石头剪刀布

A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
C=[[0]*a2,[0]*a3]
for i in range(2):
    C[i]=input().split()
[b1,c1]=divmod(a1,a2)
[b2,c2]=divmod(a1,a3)
C[0]=C[0]*b1+list(C[0][0:c1])
C[1]=C[1]*b2+list(C[1][0:c2])
def fuxi(B):
    s=s1=0
    for i in range(a1):
       if (C[0][i]=='0' and C[1][i]=='2') or (C[0][i]=='2' and C[1][i]=='5') or (C[0][i]=='5' and C[1][i]=='0'):
            s+=1
       elif (C[1][i]=='0' and C[0][i]=='2') or (C[1][i]=='2' and C[0][i]=='5') or (C[1][i]=='5' and C[0][i]=='0'):
            s1+=1
    if s>s1:
        print("A")
    elif s<s1:
        print("B")
    else:
        print("draw")
fuxi(C)

060:学生排序

n = int(input())
a = []
for i in range(n):
    s = input().split()
    s[1]=int(s[1])
    s[2] = int(s[2])
    a.append(s)
a.sort(key = lambda x:(-x[2],-x[1],x[0]))
for i in range(len(a)):
    for j in range(3):
        print(a[i][j],end=" ")
    print("")

061:图像模糊处理

m,n=map(int,input().split())#获得两个矩阵的行列数
D=[[0 for i in range(n)] for j in range(m)]
C=[[0]*n]*m
for i in range(m):
    C[i]=input().split()
    for j in range(n):
        C[i][j]=int(C[i][j])
for i in range(m):
    for j in range(n):
        if i==0 or i==m-1 or j==0 or j==n-1:
            D[i][j]=C[i][j]
        else:
            D[i][j] =round((C[i-1][j]+C[i+1][j]+C[i][j-1]+C[i][j+1]+C[i][j])/5)
for i in range(m):
    for j in range(n):
        print(D[i][j],end=' ')
    print("")

062:单词出现频率统计

dict={}
try:
    while True:
        s=input()
        dict[s]=dict.get(s,0)+1
except:
    for x in sorted(dict.items(),key=lambda x:(-x[1],x[0])):
        print(x[1],x[0])

063:统计不重复的单词个数

s = []
while 1:
    try:
        s.append(input())
    except:
        print(len(set(s)))
        break

064:过滤多余的空格

解法一:

A=input()
B=A.split()
for i in range(len(B)):
    if i==len(B)-1:
        print(B[i])
    else:
        print(B[i],end=' ')

解法二:

import re
A=input()
print(re.sub(r' +',' ',A))#以列表的方式返回

065:统计数字字符个数

解法一:

A=input()
s=0
for i in range(10):
    a=str(i)
    b=A.count(a)
    s=s+b
print(s)

解法二:

import re
s1=0
A=input()
C=re.findall(r'd+',A)#以列表的方式返回
if len(C)>0:
  for i in range(len(C)):
      s=len(C[i])
      s1=s+s1
  print(s1)
else:
  print(0)

066:大小写字母互换

解法一:

A=input()
B=[0]*len(A)
for i in range(len(A)):
    if 'a'<=A[i]<='z':
        c=A[i]
        B[i]=c.upper()
    elif 'A'<=A[i]<='Z':
        c = A[i]
        B[i] = c.lower()
    else:
        B[i] = A[i]
B1=''.join(B)
print(B1)

解法二:

A=input()
print(A.swapcase())

067:找第一个只出现一次的字符

A=input()
for i in range(len(A)):
    if A.count(A[i])==1:
        print(A[i])
        break
if i ==len(A)-1 and i>0:
    print('no')

068:判断字符串是否为回文

A=input()
B=A[::-1]
if A==B:
    print('yes')
else:
    print('no')

069:字符串最大跨距

A=input()
B=A.split(',',2)
S=B[0]
S1=B[1]
S2=B[2]
a=len(S)
a1=len(S1)
a2=len(S2)
c=S.index(S1)
c1=a-S[::-1].index(S2[::-1])
if c+a1<=c1-a2:
    print(c1-a2-a1-c)
else:
    print(-1)

070:找出全部子串位置

n=int(input())
for i in range(n):
    a,b=input().split()
    t=0
    if a.find(b)==-1:
        print("no")
    else:
        while True:
            t=a.find(b,t)
            if t==-1:
                break
            print(t,end=" ")
            t=t+len(b)
        print()

071:石头剪刀布

A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
C=[[0]*a2,[0]*a3]
for i in range(2):
    C[i]=input().split()
[b1,c1]=divmod(a1,a2)
[b2,c2]=divmod(a1,a3)
C[0]=C[0]*b1+list(C[0][0:c1])
C[1]=C[1]*b2+list(C[1][0:c2])
def fuxi(B):
    s=s1=0
    for i in range(a1):
       if (C[0][i]=='0' and C[1][i]=='2') or (C[0][i]=='2' and C[1][i]=='5') or (C[0][i]=='5' and C[1][i]=='0'):
            s+=1
       elif (C[1][i]=='0' and C[0][i]=='2') or (C[1][i]=='2' and C[0][i]=='5') or (C[1][i]=='5' and C[0][i]=='0'):
            s1+=1
    if s>s1:
        print("A")
    elif s<s1:
        print("B")
    else:
        print("draw")
fuxi(C)

072:向量点积计算

A=int(input())
m=[0]*A
B=input().split()
C=input().split()
for i in range(A):
    m[i]=int(B[i])*int(C[i])
print(sum(m))

073:万年历

xq=["Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday"]
n=int(input())
for n1 in range(n):
    monthDays = [-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    days = 0
    lst = input().split()
    year, month, date = int(lst[0]), int(lst[1]), int(lst[2])

     # 该模块判断是否合法
    buhefa=0
    if month>12 or month<1:
        buhefa=1

    else:
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            if (date < 1 or date > monthDays[month]) and month != 2:
                buhefa = 1
            if month == 2 and date > 29:
                buhefa = 1
        else:
            if date < 1 or date > monthDays[month]:
                buhefa = 1
    # 该模块判断是否合法

    if buhefa:    # 不合法
        print("Illegal")
    else:         # 合法
        if year >= 2012:
            for y in range(2012, year):  # 先累加过掉的整年的天数
                if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:  # 闰年
                    days += 366
                else:
                    days += 365
            if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
                monthDays[2] = 29
            for i in range(1, month):  # 再累加year那年过掉的整月的天数
                days += monthDays[i]
            days += date  # 累加year年month那个月的天数
            days -= 22  # 2012年1月22日是星期天。扣掉2012年的前22天
            print(xq[days % 7])  # 星期天算一周的第0天
        else:
            for y in range(year, 2012):
                if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:  # 闰年
                    days += 366
                else:
                    days += 365
            if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
                monthDays[2] = 29
            for i in range(1, month):  # 减去多余的
                days -= monthDays[i]
            days -= date # 同上需要减去多余的
            days += 22	# 加上需要的
            print(xq[(7 - days % 7) % 7]) # 

074:很简单的整数划分问题

n = int(input())
dp = [0]*(n+1)
dp[0] = 1
mod = int(1e9+7)
for i in range(1, n+1):
    for j in range(i, n+1):
        dp[j] = (dp[j] + dp[j-i]) % mod
print(dp[n])

075:病人排队

n = int(input())
a = []
for i in range(n):
    s = input().split()
    a.append(s + [i])
def f(x):
    if int(x[1]) >= 60:
        return (-int(x[1]),int(x[2]))
    else:
        return (0,x[2])
a.sort(key = f)
for j in range(n):
    print(a[j][0])

076:回文子串

s = input()
for i in range(2,len(s)+1):
    for j in range(0,len(s)+1-i):
        t = s[j:j+i]
        if t == t[::-1]:
            print(t)

077:矩阵乘法

A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
C=[[0]*a2]*a1
D=[[0]*a3]*a2
b=[[0 for i in range(a3)] for j in range(a1)] #创建一个m行n列的初始化矩阵
for i in range(a1):
    C[i]=input().split()
    for j in range(a2):
        C[i][j]=int(C[i][j])
for i in range(a2):
    D[i]=input().split()
    for j in range(a3):
        D[i][j]=int(D[i][j])
for i in range(a1):
    for j in range(a3):
        E = 0
        for k in range(a2):
          E+=C[i][k]*D[k][j]
        b[i][j]=E
for i in range(a1):
    for j in range(a3):
        print(b[i][j],end=' ')
    print("")

078:矩阵转置

A=input()
B=A.split(' ',1)
a1=int(B[0])
a2=int(B[1])
C=[[0]*a2]*a1
for i in range(a1):
    C[i]=input().split()
    for j in range(a2):
        C[i][j]=int(C[i][j])
for i in range(a2):
    for j in range(a1):
        print(C[j][i],end=' ')
    print("")

079:计算鞍点

f=0
C=[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
for i in range(5):
  A = input()
  B=A.split()
  C[i][0]=int(B[0])
  C[i][1] = int(B[1])
  C[i][2] = int(B[2])
  C[i][3] = int(B[3])
  C[i][4] = int(B[4])
for i in range(5):
    for j in range(5):
        d=max(C[i])
        if min(C[0][j],C[1][j],C[2][j],C[3][j],C[4][j])==d and C[i][j]==d:
            print(i+1,end=' ')
            print(j+1,end=' ')
            print(C[i][j],end='')
            f=1
if f==0:
    print('not found')

080:最简单的单词

s = int(input())
for i in range(s):
    A=int(input())
    d = {}
    c = []
    d1 = {}
    for i in  range(A*10):
        B=input().split()
        d.setdefault(B[0], []).append(int(B[1]))
        c.append(B[0])
    for i in range(A * 10):
        c1=d[c[i]]
        a1=sum(c1)/len(c1)
        d1.setdefault(c[i],a1)
    print(min(d1, key=lambda k: d1[k]))

081:校园食宿预订系统

n,m=list(map(int,input().split()))
d={}
z=[]
c=[[0 for i in range(3)] for j in range(n)] #创建一个m行n列的初始化矩阵
for i in range(m+n):
    B = input().split()
    if i<m:
        d.setdefault(B[0],[int(B[1]),int(B[2])])
    else:
        c[i-m]=B
for i in range(n):
    for j in range(3):
        e=c[i][j]
        f,g=d[e]
        if g>0:
            z.append(f)
            d[e]=[f,g-1]
print(sum(z))

082:更强的卷王查询系统

students = {}
n = int(input())
for i in range(n):
    course, name, score = input().split()
    if name not in students:
        students[name] = {}
    students[name][course] = score
    students[name]["participation"] = False
n = int(input())
for i in range(n):
    s = input().split()
    for j in range(1, int(s[0]) + 1):
        for k in students.items():
            value = k[1]
            if s[j] in value: #代表该学生考过这个
                if "total" not in value:
                    value["total"] = int(value[s[j]])
                else:
                    value["total"] = int(value[s[j]]) + value["total"]
    for k in students.items():
        values = k[1]
        isParticipation = 0
        for l in range(1, int(s[0]) + 1):
            if s[l] in values:
                isParticipation += 1
        if isParticipation == int(s[0]):#该名学生这一组课都考过
            values["participation"] = True #标记参与了这一组全部考试
            values["avg"] = float(values["total"]) / int(s[0]) #计算平均值
        values["total"] = 0
    maxAvg = {}#记录最高平均分
    for k in students.items():
        values = k[1]
        if values["participation"]:
            if maxAvg:
                if maxAvg["avg"] <= values["avg"]:
                    if maxAvg["avg"] == values["avg"]:
                        if maxAvg["name"] > k[0]:
                            maxAvg["name"] = k[0]
                            maxAvg["avg"] = values["avg"]
                        else:
                          pass
                    else:
                        maxAvg["name"] = k[0]
                        maxAvg["avg"] = values["avg"]
            else:#第一次添加为空
                maxAvg["name"] = k[0]
                maxAvg["avg"] = values["avg"]
            values["participation"] = False
    print(maxAvg["name"])

083:抽取ip地址

import re
lines=[]
while True:
    try:
        lines.append(input())
    except:
        break
 
for line in lines:
    mts = re.findall(r'(^|[^d.]+)(?!0d+.)((([01]{0,1}d{0,1}d|2[0-4]d|25[0-5]).){3}([01]{0,1}d{0,1}d|2[0-4]d|25[0-5]))(?![d.]+)', line)
    for mt in mts:
        print(mt[1])

084:找出所有整数

import re
m='d+'
while True:
    try:
        s = input()
        lst = re.findall(m,s)
        for x in lst:
            print(x)
    except:
        break

085:找出所有整数和小数

import re
m=r'd+.d+|d+'
while True:
    try:
        s = input()
        lst = re.findall(m,s)
        for x in lst:
            print(x)
    except:
        break

086:找出小于100的整数

import re
m = r"(^|[^0-9-])(d{1,2})([^0-9]|$)"
for i in range(2):
        s = input()
        lst = re.findall(m,s)
        for x in lst:
         print(x[1])

087:密码判断

import re
m = '^[a-zA-Z][w-]{7,}$'
while True:
    try:
        s = input()
        if re.match(m,s) != None:
            print("yes")
        else:
            print("no")
    except:
        break

088:找<>中的数

A=int(input())
for i in range(A):
    f=1
    s = input()
    for i in range(0,len(s)):
        for j in range(i+1,len(s)+1):
            t = s[i:j]
            if t[0]=='<' and t[-1]=='>':
                t1=t[1:len(t)-1]
                if t1.isdigit():
                    a=int(t1)
                    if 0<=a<=999 and len(t1)<4 and str(a)==t1:
                        f=0
                        print(a,end=" ")
    if f==0:
        print("")
    else:
        print('NONE')

089:检查美元

解法一:

while True:
    try:
        s = input()
        fa=2
        fb=2
        for i in range(0,len(s)):
            for j in range(i+1,len(s)+1):
                t = s[i:j]
                if t[0]=='$' and t[-1]=='$':
                    t1=t[1:len(t)-1]
                    if "," in t1:
                        c=t1.split(",")
                        for i in range(len(c)):
                            d=c[i]
                            if i==0:
                                if d>'0':
                                    fa=1
                                else:
                                    fa=0
                            else:
                                if len(d)==3:
                                    fb=1
                                else:
                                    fb=0
                    else:
                        if 0<len(t1)<=3 and t1.isdigit()==True:
                            if t1[0]!='0':
                                fa=1
                                fb = 1
            if fa==1 and fb==1:
                print('yes')
                break
        else:
            print("no")
    except:
        break

解法二:

import re
m=r"$[1-9]{1}d{0,2}$|$[1-9]{1}d{0,2},(d{3},){1,}d{3}$|$[1-9]{1}d{0,2},[0-9]{3}$"
# m=r"$[1-9]{1,3}$|$[1-9]{1,3},[0-9]{3}$"
while True:
    try:
        s = input()
        if re.search(m,s) != None:
            print("yes")
        else:
            print("no")
    except:
        break

090:电话号码

解法一:

import re
m=r'(<([a-z]+)>.+?</)2>'
n=r'((d{1,2}))-d{3}(?=[^d])'
i=int(input())
while i:
    biaoji=0
    s=input()
    l1=re.findall(m,s)
    if len(l1)!=0: #找到符合条件的tag,但注意l1里的元素是子串列表,比如l1[0]=[balabala,ba] l1[0][0]为tag,l1[0][1]为m里的分组一
        for l2 in l1:
            l3=list(re.findall(n,l2[0]))
            if len(l3)!=0: #在符合条件里的tag里找到号码了但这里有疑问,他直接给了n中分组一的值,而不是返回一个类似 [(02)-123,02],直接给了02
                time=len(l3) #记录有多少个区号,方便控制输出格式里的逗号
                print('<'+l2[1]+'>',end='')
                print(l3[0],end='')
                for x in range(1,time):
                    print(','+l3[x],end='')
                print('</'+l2[1]+'>')
                biaoji=1;

        if biaoji==0:
            print("NONE")
    else:
        print("NONE")
    i-=1

解法二:

import re
D=int(input())
m=r'(<([a-z]+)>.+?</)2>'
n=r'((d{1,2}))-d{3}(?=[^d])'
for j in range(D):
     A=input()
     B=re.findall(m,A)
     if len(B)>0:
          a=0
          for i in range(len(B)):
               x=B[i][0]
               C=re.findall(n,x)
               if len(C)>0:
                    my_string = ','.join(C)
                    print('<'+B[i][1]+'>'+my_string+'</'+B[i][1]+'>')
                    a=1
          if a==0:
               print("NONE")
     else:
          print("NONE")

091:通讯记录

解法一:

def xiugai(st):
    if st=="_" :
        return True
    else:
        return st.isalnum()

s1=len('@pku.edu.cn')
s2=len('@stu.pku.edu.cn')
while True:
    try:
        s = input()
        ss=0
        print('----')
        for i in range(0,len(s)):
            for j in range(i+1,len(s)+1):
                t = s[i:j]
                if t[0]=='<' and t[-1]=='>':
                    t1=t[1:len(t)-1]
                    if t1.count("<")==1 and t1.count(">")==1:
                        a=t1.find(">")
                        b=t1.find("<")
                        if a<b and t1[0:a]!='':
                            r1=t1[0:a]
                            r2=t1[b+1:len(t1)]
                            if '/'+r1==r2:
                                r3=t1.find("@pku.edu.cn")
                                r4=t1.find('@stu.pku.edu.cn')
                                if r3>0:
                                    t2=t1[a+1:r3]
                                    a1=t2.find("%")
                                    if a1>=0:
                                        t3=t2[a1+1:]
                                        if t3[0]!='%' and len(t3)<=8:
                                            cou = 0
                                            for i in range(len(t3)):
                                                if t3[i]!='%':
                                                    if xiugai(t3[i]):
                                                        cou+=1
                                                else:
                                                    cou+=1
                                            if cou==len(t3):
                                                t4=t3.replace("%"," ")
                                                print(t4+'@pku.edu.cn')
                                                ss+=1
                                if r4>0:
                                    if r4>r3 and r3>0:
                                        t5=t1[r3+s1:r4]
                                        a11 = t5.find("%")
                                        if a11 >= 0:
                                            t33 = t5[a11+ 1:]
                                            if t33[0] != '%' and len(t33) <= 8:
                                                cou = 0
                                                for i in range(len(t33)):
                                                    if t33[i] != '%':
                                                        if xiugai(t33[i]):
                                                            cou += 1
                                                    else:
                                                        cou += 1
                                                if cou == len(t33):
                                                    t6 = t33.replace("%", " ")
                                                    print(t6 + '@stu.pku.edu.cn')
                                                    ss+=1
                                    else:
                                        r5=t1.find('%')
                                        t7=t1[r5+1:r4]
                                        if t7[0]!='%' and len(t7)<=8:
                                            cou = 0
                                            for i in range(len(t7)):
                                                if t7[i]!='%':
                                                    if xiugai(t7[i]):
                                                        cou+=1
                                                else:
                                                    cou+=1
                                            if cou==len(t7):
                                                t8=t7.replace("%"," ")
                                                print(t8+'@stu.pku.edu.cn')
                                                ss+=1
        if ss==0:
            print('NONE')
    except:
        break

解法二:

import re
while True:
     try:
          m=r'(<([a-z]+)>.+?</)2>'
          n=r"%[^%]+%w{1,8}@pku.edu.cn|%[^%]+%w{1,8}@stu.pku.edu.cn"
          A=input()
          B=re.findall(m,A)
          print("----")
          if len(B)>0:
               a=0
               for i in range(len(B)):
                    x=B[i][0]
                    C=re.findall(n,x)
                    if len(C)>0:
                         for k in range(len(C)):
                              D=re.sub("%"," ",C[k])
                              print(D.strip())
                              a=1
               if a==0:
                    print("NONE")
          else:
               print("NONE")
     except:
          break

092:时间处理

import datetime
while True:
    try:
        a=input()
        if "AM" in a or "PM" in a:
            tm1=datetime.datetime.strptime(a,"%m-%d-%Y %H:%M %p") # 生成时间对象
        else:
            tm1=datetime.datetime.strptime(a,"%Y %m %d %H %M")
        b=input()
        if ' ' not in b:
            delta=datetime.timedelta(seconds=int(b))
        else:
            i,j,k=map(int,b.split())
            delta=datetime.timedelta(days=i,hours=j,minutes=k)
        newt=tm1+delta

        print(newt.strftime("%Y-%m-%d %H:%M:%S"))
    except  Exception as a:
        break

093:成绩排序

n = int(input())
a = []
for i in range(n):
    s = input().split()
    a.append((s[0],int(s[1])))
a.sort(key = lambda x:(-x[1],x[0]))
for x in a:
    print(x[0],x[1])

094:扑克牌排序

import functools

dict1 = {'h': 4, 's': 3, 'd': 2, 'c': 1}
dict2 = {'2': 13, 'A': 12, 'K': 11, 'Q': 10, 'J': 9, '1': 8, '9': 7, '8': 6, '7': 5, '6': 4, '5': 3, '4': 2, '3': 1}


# 1表示str1大,-1表示str2大
def cmp(str1, str2) -> int:
    if str1[1] != str2[1]:
        num1 = dict2[str1[1]]
        num2 = dict2[str2[1]]
        if num1 > num2:
            return 1
        if num1 < num2:
            return -1
    else:
        num1 = dict1[str1[0]]
        num2 = dict1[str2[0]]
        if num1 > num2:
            return 1
        else:
            return -1
    return 0


try:
    while True:
        cnt = 0
        mylist = list(map(str, input().split()))
        if mylist == []:
            break
        newlist = sorted(mylist, key=functools.cmp_to_key(cmp), reverse=True)
        result = str(' '.join(str(i) for i in newlist))
        print(result + ' ')
except EOFError:
    pass

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容