问题描述 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
将数字转成十六进制,在鉴别是否都为字幕组成。
for i in range(2022,4000):
s = str(hex(i))[2:]
flag = 0
for j in s:
if j not in ["a","b","c","d","e","f"]:
flag = 1
if flag == 0:
print(i)
break
答案:2730
问题描述 在 Excel 中,列的名称使用英文字母的组合。前 26 列用一个字母,依次为 A 到 Z,接下来 26*26 列使用两个字母的组合,依次为 AA 到 ZZ。 请问第 2022 列的名称是什么? 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。
二十六进制计数,除数取余就好 。
答案:BYT
问题描述 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。 例如,2022年11月13日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。 请提交满足条件的日期的总数量。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
datetime库
import datetime
def check(time):
year, month, day = time.split('-')
num1, num2, num3 = 0, 0, 0
for i in year:
num1 += int(i)
for i in month:
num2 += int(i)
for i in day:
num3 += int(i)
if num1 == num2 + num3:
return True
else: return False
ans = 0
start = datetime.date(1900, 1, 1)
end = datetime.date(9999, 12, 31)
while start <= end:
if check(str(start)): ans += 1
# 9999.12.31 为最大日期,在加日期则超限
if start == end:break
start += datetime.timedelta(days=1)
print(ans)
问题描述 小蓝有 30 个数,分别为:99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。 小蓝可以在这些数中取出两个序号不同的数,共有 30*29/2=435 种取法。 请问这 435 种取法中,有多少种取法取出的两个数的乘积大于等于 2022 。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
ans = 0
lst = [99, 22, 51, 63, 72, 61, 20, 88, 40, 21,
63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77]
for i in range(30):
for j in range(30):
if i == j:break
res = lst[i]*lst[j]
if res >= 2022:
ans += 1
print(ans)
答案:189
问题描述 小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 或 1 。 110010000011111110101001001001101010111011011011101001111110 010000000001010001101100000010010110001111100010101100011110 001011101000100011111111111010000010010101010111001000010100 101100001101011101101011011001000110111111010000000110110000 010101100100010000111000100111100110001110111101010011001011 010011011010011110111101111001001001010111110001101000100011 101001011000110100001101011000000110110110100100110111101011 101111000000101000111001100010110000100110001001000101011001 001110111010001011110000001111100001010101001110011010101110 001010101000110001011111001010111111100110000011011111101010 011111100011001110100101001011110011000101011000100111001011 011010001101011110011011111010111110010100101000110111010110 001110000111100100101110001011101010001100010111110111011011 111100001000001100010110101100111001001111100100110000001101 001110010000000111011110000011000010101000111000000110101101 100100011101011111001101001010011111110010111101000010000111 110010100110101100001101111101010011000110101100000110001010 110101101100001110000100010001001010100010110100100001000011 100100000100001101010101001101000101101000000101111110001010 101101011010101000111110110000110100000010011111111100110010 101111000100000100011000010001011111001010010001010110001010 001010001110101010000100010011101001010101101101010111100101 001111110000101100010111111100000100101010000001011101100001 101011110010000010010110000100001010011111100011011000110010 011110010100011101100101111101000001011100001011010001110011 000101000101000010010010110111000010101111001101100110011100 100011100110011111000110011001111100001110110111001001000111 111011000110001000110111011001011110010010010110101000011111 011110011110110110011011001011010000100100101010110000010011 010011110011100101010101111010001001001111101111101110011101 如果从一个标为 1 的位置可以通过上下左右走到另一个标为 1 的位置,则称两个位置连通。与某一个标为 1 的位置连通的所有位置(包括自己)组成一个连通分块。 请问矩阵中最大的连通分块有多大? 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得。
BFS,统计出遍历过的点数,比出最大的连通分块。
def BFS(a, i, j, flag):
if i < 1 or i > 30 or j < 1 or j > 60:
return False
if a[i][j] == 0 or flag[i][j] == 1 :
return False
flag[i][j] = 1
BFS(a, i - 1, j, flag)
BFS(a, i + 1, j, flag)
BFS(a, i, j - 1, flag)
BFS(a, i, j + 1, flag)
def Calculate(a):
flag = [[0] * N for _ in range(M)]
max_num = 0
for i in range(1,31):
for j in range(1,61):
if a[i][j] == 1 and flag[i][j] == 0:
BFS(a, i, j, flag)
num = sum([sum(row) for row in flag])
max_num = max(max_num, num)
flag = [[0] * N for _ in range(M)]
return max_num
M, N = 40, 70
a = [[0] * N for _ in range(M)]
for i in range(1, 31):
a[i][1:61:] = map(int, list(input()))
print(Calculate(a))
答案:148