ai lab 秋招笔试2025-10-13

难度不大,估计后面面试会狠狠拷打/刷人😓。

T1

给出T(1≤T≤1000)T(1\le T\le 1000)T(1T1000)个数字,每个数字的范围是[1,101000][1, 10^{1000}][1,101000],请你给出每个数字显示需要的数码管个数

示例

输入
2
173
65
输出
8 leds
11 leds

解答

签到题

convertList = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
T = int(input())
for _ in range(T):
	ans = 0
	line = input()
	for num in line:
		ans += convertList[int(num)]
	print(f'{ans} leds')
	

T2

给一个字符串,长度为n,进行n次下面的”扩散“操作,请你给出扩散后的结果。
阴阳盘初始状态为阴
操作次数和字符串下标均从1开始,在第 i 次操作中

  • 如果iii为奇数,操作下标p=n/2−floor(i/2)p=n/2 - floor(i/2)p=n/2floor(i/2)floorfloorfloor为下取整
  • 如果iii为偶数,操作下标p=n/2+i/2p=n/2 + i/2p=n/2+i/2

根据阴阳盘状态作出如下操作

  • 如果阴阳盘状态为阴,并且当前操作位置上的字符为小写字符。将字符转换为大写字符,并转换阴阳盘状态为阳
  • 如果阴阳盘状态为阳,并且当前操作位置上的字符为大写字符。将字符转换为小写字符,并转换阴阳盘状态为阴

其余情况不做任何操作。题目保证nnn为偶数且n>0n\gt0n>0

示例

输入
6
abcDEF
输出
ABCdef

解答

一开始理解错了题意,以为只需要把前半段转换成大写,后半段转换成小写,忽略了“其余情况不做任何操作”。
按照题目来操作即可。

from math import floor
n = int(input())
instr = input()
flag = False #阴阳盘为阴
ans_temp = None
ans_ji = []
ans_ou = []
for i in range(1, n+1):
	if i&1:	#奇数位置
		p = n/2 - floor(i/2)
	else:
		p = n/2 + i/2
	p = int(p)
		
	if not flag:	#阴阳盘为阴,变小写为大写
		if ord(instr[p-1])>=97:
			ans_temp = chr(ord(instr[p-1])-32)
			flag = True
		else:
			ans_temp = instr[p-1]
	else:				#阴阳盘为阳
		if ord(instr[p-1])<97:
			ans_temp = chr(ord(instr[p-1])+32)
			flag = False
		else:
			ans_temp = instr[p-1]
	
	if i&1:
		ans_ji.append(ans_temp)
	else:
		ans_ou.append(ans_temp)

ans_ji.reverse()
ans_temp = ans_ji + ans_ou
print("".join(ans_temp))

T3

小明在数轴上放置了一个机器人,当提供L指令时机器人会向左移动一格,当提供R指令时机器人会向右移动一格。数轴上的位置iii处放置了∣i∣|i|i个糖果,当机器人首次到达一个位置时会得到对应数量的糖果。小明提供一个长度为n的操作序列,并重复执行k次,请你计算出机器人能够得到的糖果总数

示例

输入
3 2
RRR
输出
21

输入
5 5
RRLLR
输出
21

解答

一开始想错了,直接把区间端点∗*k,实际上应该是结束点∗*k+(端点-结束点)才是覆盖的范围。然后就是等差数列求和。

line = input().split(' ')
n = int(line[0])
k = int(line[1])
command = input()

now = 0
left = 0
right = 0
ans = 0
for i in range(n):
	if command[i] == 'L':
		now -= 1
	else:
		now += 1
	left = min(left, now)
	right = max(right, now)

#now *= k
if now < 0:
	left = now*k + (left - now)
elif now > 0:
	right = now*k + (right - now)
left = -left
ans = left*(left+1)/2 + right*(right+1)/2
ans = int(ans)

print(ans)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值