题目一:
代码:
l1 = ['geng','xin','ren','gui','jia','yi','bing','ding','wu','ji',]
l2 = ['shen','you','xu','hai','zi','chou','yin','mao','chen','si','wu','wei']
n = int(input())
print(l1[n%10],l2[n%12],sep='')
题目二:
【问题描述】
2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd
的格式写成一个8位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
【输入格式】
输入包含一个八位整数 N,表示日期。
【输出格式】
输出两行,每行1个八位数。
第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
代码:
import datetime
n = input()
start = datetime.date(int(n[0:4]),int(n[4:6]),int(n[6:]))
delta = datetime.timedelta(days=1)
while 1:
start+=delta
if str(start.year)[::-1]==str(start.month).zfill(2)+str(start.day).zfill(2):
print(str(start.year)+str(start.year)[::-1])
break
start = datetime.date(int(n[0:4]),int(n[4:6]),int(n[6:]))
while 1:
start+=delta
if str(start.year)[0:2][::-1]==str(start.year)[2:4][::-1]==str(start.month).zfill(2)==str(start.day).zfill(2):
print(str(start.year)[0:2]*2+str(start.year)[0:2][::-1]*2)
break
题目三:
在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。
比如:248 * 15 = 3720
把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得
2 + 4 + 8 = 14 ==> 1 + 4 = 5;
1 + 5 = 6
5 * 6
而结果逐位求和为 3
5 * 6 的结果逐位求和与3符合,说明正确的可能性很大!!(不能排除错误)
请你写一个计算机程序,对给定的字符串逐位求和:
输入为一个由数字组成的串,表示n位数(n<1000);
输出为一位数,表示反复逐位求和的结果。
代码:
def f(l):
if len(str(sum(l))) == 1:
return sum(l)
else:
return f([int(i) for i in str(sum(l))])
s = input()
l = [int(i) for i in s]
print(f(l))
题目四:
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。
【输入格式】
输入一行包含一个单词,单词只由小写英文字母组成。
【输出格式】
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
代码:
from collections import Counter
words = [i for i in input()]
word_counts = Counter(words)
top = sorted(word_counts.most_common(len(words)), key=lambda tup: tup[1], reverse=True)
l = []
max = top[0][1]
for i in top:
if i[1]==max:
l.append(i)
else:
break
l = sorted(l)
print(l[0][0],l[0][1],sep='\n')
题目五:
代码:
n = int(input())
l = []
for i in range(n):
l.append(list(map(int, input().split())))
for i in range(n-1):
for j in range(i+1):
if i==0:
continue
if j==0:
l[i][j]+=l[i-1][j]
elif j==i:
l[i][j]+=l[i-1][j-1]
else:
l[i][j]+=max(l[i-1][j],l[i-1][j-1])
if n%2==0:
l[i+1][n//2-1]+=max(l[i][n//2-2],l[i][n//2-1])
l[i+1][n//2]+=max(l[i][n//2-1],l[i][n//2])
print(max(l[i+1][n//2-1], l[i+1][n//2]))
else:
l[i+1][n//2]+=max(l[i][n//2-1],l[i][n//2])
print(l[i+1][n//2])
题目六:
代码:
import datetime
n = int(input())
start = datetime.datetime(1970, 1, 1, 0, 0, 0)
sep = datetime.timedelta(seconds=0.001)
end = start + sep*n
print("%s:%s:%s"%(str(end.hour).zfill(2), str(end.minute).zfill(2), str(end.second).zfill(2)))
题目七:
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数w m n,空格分开,都在1到10000范围内
w为排号宽度,m,n为待计算的楼号。
要求输出一个整数,表示m n 两楼间最短移动距离
例如:
用户输入:
6 8 2
则,程序应该输出:
4
再例如:
用户输入:
4 7 20
则,程序应该输出:
5
代码(解法一):
w, m, n = map(int,input().split())
l = []
f = 1
i = 1
a,b,c,d=0,0,0,0
while 1:
if f%2==1:
x = [j+i-1 for j in range(1,w+1)]
l.append(x)
if min(m,n) in x:
a=f
b=x.index(min(m,n))
if max(m,n) in x:
c=f
d=x.index(max(m,n))
break
i+=w
else:
x=[i+w-j for j in range(1,w+1)]
l.append(x)
if min(m,n) in x:
a=f
b=x.index(min(m,n))
if max(m,n) in x:
c=f
d=x.index(max(m,n))
break
i+=w
f+=1
print(abs(c-a)+abs(d-b))
代码(解法二):
w, m, n = map(int, input().split())
l = []
if max(m, n)%w == 0:
line = max(m, n)//w
else:
line = max(m, n)//w+1
for i in range(line):
if i%2 == 0:
l.append([i*w+j for j in range(1,w+1)])
else:
l.append([(i+1)*w-j for j in range(w)])
for i in range(line):
if min(m, n) in l[i]:
a = i
b = l[i].index(min(m, n))
c = line-1
d = l[line-1].index(max(m, n))
print(abs(a-c)+abs(b-d))
题目八:
代码:
a = int(input())
b = 0
s = 0
while 1:
con=a
a=(b+con)//3
b=(b+con)%3
s+=con
if a==0 and b//3==0:
print(s)
break
题目九:
代码:
import datetime
s = input()
s = s.split('/')
l=[]
begin = datetime.date(1960,1,1)
end = datetime.date(2059,12,31)
for i in ['19','20']:
try:
a = datetime.date(int(i+s[0]),int(s[1]),int(s[2]))
if a>=begin and a<=end:
l.append(a)
except:
pass
try:
a = datetime.date(int(i+s[2]),int(s[0]),int(s[1]))
if a>=begin and a<=end:
l.append(a)
except:
pass
try:
a = datetime.date(int(i+s[2]),int(s[1]),int(s[0]))
if a>=begin and a<=end:
l.append(a)
except:
pass
l=list(set(l))
l.sort()
for i in l:
print(i)
题目十:
代码:
n = int(input())
arr = []
for i in range(n):
arr.append(list(map(int,input().split())))
for i in range(n):
for j in range(n):
if i==0:
if j==0:
continue
else:
arr[i][j]+=arr[i][j-1]
elif j==0:
if i==0:
continue
else:
arr[i][j]+=arr[i-1][j]
else:
arr[i][j]+=max(arr[i][j-1],arr[i-1][j])
print(arr[n-1][n-1])