编程题2020

最优打字策略

来源:京东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)

运行通过了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值