第四届传智杯 | 练习赛 | python解法思路

导语

前几天传智杯出了练习赛,博主考研空闲之余,去做了一下
好长时间不能更新文章,实在是考研太忙
正好见很多粉丝留言传智杯的题目
网上也没有对应的教程(这也算是全网首篇了吧 啊哈哈哈,不过确实是很简单的题目)
博主也还没有系统的学过数据结构与算法 (开学以来一直在学操作系统和组成原理)
用自己的写法写了五道题的详解
希望大佬们多多指教
如果有大佬们可以传授一下考研经验
感激不尽

A [#4练习赛]符合条件的数

在这里插入图片描述
暴力破解

N,k = map(int,input().split())
init_num = N
while True:
    if str(init_num).count('3') == k:
        print(init_num)
        break
    else:
        init_num += 1

B [#4练习赛]选代表

在这里插入图片描述
利用类似字词统计的原理,代码有注释

timing = int(input())
xuehao_list = list(map(int,input().split()))
dict_num = {}
new_list = []
if len(xuehao_list) == timing:
    for i in xuehao_list:
        if i in dict_num:
            dict_num[i] += 1
        else:
        	# 这里的new_list保证按照输入顺序输出其中不重复的数字
            new_list.append(i)
            dict_num[i] = 1
for i in new_list:
    print(i,end=' ')

C [#4练习赛]成绩统计

在这里插入图片描述
这里亲测不可以用import导入math,否则会一直报错,我还纠结了半天

geshu = int(input())

stu_list = []
for i in range(geshu):
    stu_list.append(input().split())

dict_stu_list = {}
for stu_grade in stu_list:
    temp = (int(stu_grade[2])**0.5) * 10
    grade = temp * 0.6 + 0.4 * int(stu_grade[1])
    # 如果有小数点,向上取整
    if int(str(grade).split('.')[1])>0:
        grade += 1
    grade = int(grade)
    dict_stu_list[stu_grade[0]] = grade
# 对字典进行排序
ord_dict_stu = sorted(dict_stu_list.items(),key=lambda x:x[1],reverse=True)

for i in ord_dict_stu:
    print("{} {}".format(i[0],i[1]))

D [#4练习赛]背答案

在这里插入图片描述
这个题没啥说的,就是逻辑问题,但是,注意问题不能用字典存放,因为输入的问题有重复的问题,但是答案不存在重复的答案,这一个坑要注意

daan,ti_= map(int,input().split())
dict_daan = {}
dict_wenti = []
dict_xuanxiang = {1:'A',2:'B',3:'C',4:'D'}

for i in range(daan):
    ti,daan = input().split()
    dict_daan[ti] = daan

for i in range(ti_):
    ti_2,A,B,C,D = input().split()
    dict_wenti.append([ti_2,A,B,C,D])

for wenti in dict_wenti:
    for daan in dict_daan.items():
        if wenti[0] == daan[0]:
            print(dict_xuanxiang[wenti.index(dict_daan[wenti[0]])])

E [#4练习赛]击鼓传花

在这里插入图片描述
击鼓传花可能有更好的算法进行解决,奈何我的数据结构还不是很精通,打算寒假学数据结构同时,刷一刷leedcode 提高一下算法思想。

n,m,k= map(int,input().split())
init_list = list(map(int,input().split()))
new_list = []

for j in range(5):
    for i in range(m):
        temp = (init_list[i]+k)%n
        if temp>n-1:
            temp = 0
        init_list[i] = temp
    for i in init_list.copy():
        new_list.append(i)

print(n-len(set(new_list)))

祝大家考研必胜!!!!!!!!!!!!

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码魔法师!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值