最优打字策略
来源:京东2020校园招聘
题目描述:
在英文的输入中,我们经常会遇到大小写切换的问题,频繁切换大小写会增加我们的按键次数,也会降低我们的打字效率。
众所周知,切换大小写有两种方式,一种是按下“caps locks”,也就是大写锁定键,这样一来,之后的输入模式都会被切换。另一种是同时按下shift和需要打印的字母,可以临时切换大小写(算作按下两个键)。
已知初始状态下,打字模式是小写,现在给出需要打印的字符串(区分大小写),请你计算出最少需要按键多少次才能打印出来。
输入
输入第一行仅包含一个正整数n,表示字符串的长度(1<=n<=10000000)。
输入第二行包含一个长度为n的字符串,仅包含大小写字母。
输出
输出仅包含一个正整数,即最少的按键次数。
样例输入
6
AaAAAA
样例输出
8
项目分配
来源:滴滴2020校园招聘
题目描述:
某公司雇有N名员工,每名员工可以负责多个项目,但一个项目只能交由一个员工负责。现在该公司接到M个项目,令Aij表示第i名员工负责第j个项目所带来的收益,那么如果项目分配得当,总收益最大是多少?
输入
第一行包含两个整数N和M,1<=N,M<=1000
接下来N行,每行包含M个整数。第i行的第j个整数表示Aij,1<=Aij<=1000
输出
输出总收益的最大值
样例输入
3 3
1 3 3
2 2 2
3 2 1
样例输出
9
漫画(Web)
来源:3602020校园招聘
题目描述:
A同学十分喜欢看连载漫画,由于漫画章节之间有很强的关联性,所以他只会选择一些连续的章节来看。由于情节跌宕起伏,并不是每一章漫画都会令他开心。
已知这本漫画共有N章,每一章漫画都有一个开心值A[i],A同学打算至少看M章连续的小说章节,他希望这些漫画带给他的平均开心值最大。
输入
输入文件的第一行有两个正整数N,M,含义同题面。(M<=N<=100000, |A[i]|<=10000)
下面一行N个整数,第i个整数,表示第i章漫画的开心值。
输出
一个实数,保留3位小数(四舍五入),表示最大的平均愉悦值。
样例输入
10 6
6 4 2 10 3 8 5 9 4 1
样例输出
6.500
思路:
代码:
n, m = list(map(int, input().split()))
pf = list(map(int, input().split()))
res = []
for i in range(len(pf)-m+1):
summ = 0
for j in range(i, i+m):
summ += pf[j]
pj = summ / m
res.append(pj)
print('%.3f'%max(res))
写作业
来源:网易互娱2020校园招聘
题目描述:
小学生小明刚刚学会了使用竖式计算三位数乘法,为了更熟练地使用竖式,老师给他布置了N到算术题。但是这个N很多,小明感。。。。作业要求把竖式过程写出来,。。。。他打算算出今天写到的最多的数字(1,2,3,4,5,6,7,8,9,小明不喜欢数字0)是哪个,作为幸运数字。但。。。。
输入描述:
每个输入数据包含一个测试点。
第一行为一个正整数N(0<N<10000),表示老师布置的题目数
接下来N行,每行两个非负整数a, b (0<a, b<1000),表示这一题需要小明使用竖式计算a, b输出描述:
输出N+1行,前N行每行包括9个使用空格隔开的数字,第i行表示输入中的第i题需要写的数字的个数分别是多少,该行第一个数字是数字1写的次数,该行第二个数字是数字2写的次数,以此类推。
最后一行(即第N+1行)只有一个数字,即今天小明会写到的数字里次数最多的那个数字。如果有多个数字写的次数相同,则会选择最小的那个数字。(若1和2都写了10次,其他数字写的次数是0,那么今天的幸运数字是1)。
注意:小明不喜欢数字0,也绝不会算错数字。
输入
3
123 456
15 20
20 15
输出
2 2 2 2 3 3 1 3 1
1 1 2 0 1 0 0 0 0
2 2 1 0 1 0 0 0 0
1
说明
对于123 * 456,一共用到了数字1两次,数字2两次,数字3两次,数字4两次,数字5三次,数字6三次,数字7一次,数字8三次,数字9一次。
对于两个数字的计算顺序,小明会严格先写a再写b,比如9 * 233如图所示。(而不像我们日常生活中会写作233 * 9进行计算)
思路:
题目太长,大概意思是
N个乘法算术题,使用的是竖式计算,要统计1到9(不要0)的出现的个数,出现包括相乘的两个数字a, b中每个数字;竖式计算过程中每个数字;相乘后结果的每个数字。将这N个先分别统计并打印出来,再统计总的后得出最多的那个数字。
n = int(input())
# 定义函数取出被乘数的各位数字
def quchugewei(x):
l = len(str(x))
meiyiwei = []
for i in range(l):
tmp = b//(10**i)%10
meiyiwei.append(tmp)
return meiyiwei
# 计算:a乘以(被乘数的各位数字)
def chengfayunsuanhou(a,y):
meiyiweichenghoushuzu = []
for i in y:
meiyiweichenghou = a*i
meiyiweichenghoushuzu.append(meiyiweichenghou)
return meiyiweichenghoushuzu
# 定义函数用字典进行对每个数字计数
def get_count(num):
res = {'1':0, '2':0, '3':0, '4':0, '5':0, '6':0, '7':0, '8':0, '9':0}
for i in str(num):
for j in str(i):
if j == '0':
pass
else:
if j in res:
res[i] += 1
return res
total = []
for i in range(n):
a, b = list(map(int, input().split()))
qcgwshuzu = quchugewei(b)
jisuangeweishuzu = chengfayunsuanhou(a, qcgwshuzu)
achengb = a * b
allnum = []
allnum.append(a)
allnum.append(b)
allnum.extend(jisuangeweishuzu)
allnum.append(achengb)
allnumm = ''.join(str(i) for i in allnum)
total.extend(allnum)
tmp =[]
for key, value in get_count(allnum).items():
tmp.append(value)
print(' '.join(str(i) for i in tmp))
tmp1 = []
for key, value in get_count(total).items():
tmp1.append(value)
print(' '.join(str(i) for i in tmp1))
未完待续!
忘了
题目来源:米哈游2020校园招聘2019.10.10
题目描述:
给定一组数字(每个数字取值范围为0~100,可重复出现,其中0为万能数字,可以代表其他任何数字),判断它们是否连续数字组合,
例如:
3 5 4 2 和 3 5 0 2(让0代表4)和 3 6 0 0(一个0代表4,另一个0代表5)和 3 0(让0代表2或4都可以)均为连续数字组合,
而 3 5 2 和 3 5 0 1 和 3 7 0 0 和 3 3 4 5(有重复数字3)均不是连续数字组合。
输入描述:
输入为两行:
第一行为一个正整数N,代表此组合中数字个数
第二行为空格分隔的N个数字
输出描述:
如果是连续数字组合,请输出 YES+n,如果不是输出 NO+n (n代表万能数字0的个数)
输入
4
3 5 4 2
输出
YES+0
# 常规进行输入操作
N = int(input())
num = list(map(int, input().split()))
flag = 0
n = 0
# 数一下0的个数
for i in num:
if i == 0:
n += 1
# 排一下序
num.sort(reverse=False)
# 将0去除后放进新的数组num1
num1 = []
for i in num:
if i == 0:
pass
else:
num1.append(i)
# 去重后放入新的数组num2
num2 = list(set(num1))
# 判断,如果全为0的情况则直接输出yes,否则再判断:
# 如果去0后的数组(记为num1)再去重(记为num2)后两者长度不同则说明有重复数字,则输出no,否则再判断:
# 判断0的个数是否足够用以代表缺的数字
l1 = len(num1)
l2 = len(num2)
if len(num1) == 0:
flag = 1
else:
if l1 == l2:
a = max(num1) - min(num1) + 1
if a == l1:
flag = 1
else:
if len(num) <= n + (max(num1) - min(num1)):
flag = 1
else:
flag = 0
else:
flag = 0
# 输出
if flag == 1:
print("YES+%d"%n)
elif flag == 0:
print("NO+%d"%n)
咪咕
题目来源:咪咕2020校园招聘2019.10.16
题目描述:
。。。(一堆话)
给定一个非负整数 num。对于 0<=i<=num 范围中的每个数字i,计算其二进制数中的1的数目并将它们作为数组返回。
输入示例:
2
输出示例:
0,1,1
num = int(input())
res = []
for i in range(num + 1):
num2lst = list("".join(list(bin(i))))
count = 0
for j in num2lst:
if j == '1':
count += 1
res.append(count)
ress = ",".join(str(i) for i in res)
print(ress)
运行通过了