【算法面试题】-06

智能成绩表

题目描述
小明来到学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?

输入描述
第 1 行输入两个整数,学生人数 n 和科目数量 m。
0 < n < 100
0 < m < 10
第 2 行输入 m 个科目名称,彼此之间用空格隔开。

科目名称只由英文字母构成,单个长度不超过10个字符。

科目的出现顺序和后续输入的学生成绩一一对应。

不会出现重复的科目名称。

第 3 行开始的 n 行,每行包含一个学生的姓名和该生 m 个科目的成绩(空格隔开)

学生不会重名。
学生姓名只由英文字母构成,长度不超过10个字符。
成绩是0~100的整数,依次对应第2行种输入的科目。
第n+2行,输入用作排名的科目名称。若科目不存在,则按总分进行排序。

输出描述
输出一行,按成绩排序后的学生名字,空格隔开。成绩相同的按照学生姓名字典顺序排序。
在这里插入图片描述
在这里插入图片描述

class Student:def __init__(self):self.name = ""  # 学生名字self.scores = []  # 每门课成绩students = [Student() for _ in range(10004)]  # 存储学生信息的数组
key_index = 0  # 要排序的课程名的下标# 自定义排序函数
def student_comparator(a, b):if a.scores[key_index] != b.scores[key_index]:return b.scores[key_index] - a.scores[key_index]return (a.name > b.name) - (a.name < b.name)n, m = map(int, input().split())  # 学生数量和课程数量
course_names = input().split()  # 课程名数组for i in range(1, n + 1):student_info = input().split()students[i].name = student_info[0]  # 读取学生名字total_score = 0students[i].scores = list(map(int, student_info[1:]))  # 读取每门课成绩total_score = sum(students[i].scores)  # 计算总分students[i].scores.append(total_score)  # 将总分放入成绩数组末尾key = input()  # 要排序的课程名
key_index = m  # 若没找到,赋值为最后一个位置,也就是总分
for i in range(m):  # 寻找这个课程名的下标if course_names[i] == key:key_index = ibreakstudents = students[1:n+1]  # 仅保留有效学生信息
students.sort(key=lambda x: (x.scores[key_index], -ord(x.name[0])), reverse=True)  # 排序for i in range(n):print(students[i].name, end=" ")

在这里插入图片描述

按身高和体重排队

题目描述
某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列, 对身高相同的人,按体重由轻到重排列; 对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。

输入描述
两个序列,每个序列由n个正整数组成(0 < n <= 100)。

第一个序列中的数值代表身高,第二个序列中的数值代表体重。

输出描述
排列结果,每个数值都是原始序列中的学生编号,编号从1开始
用例1
输入
4
100 100 120 130
40 30 60 50

输出
2 1 3 4

说明

输出的第一个数字2表示此人原始编号为2,即身高为100,体重为30的这个人。 由于他和编号为1的人身高一样,但体重更轻,因此要排在1前面。

在这里插入图片描述

class Person:def __init__(self, height, weight):self.height = heightself.weight = weightn=int(input())
height=list(map(int,input().split()))
weight=list(map(int,input().split()))
person=[]
for i in range(n):person.append([height[i],weight[i],i+1])person.sort(key=lambda x:(x[0],x[1],x[2]))for i in range(n):print(person[i][2],end='')if i+1<n:print(" ",end='')

在这里插入图片描述

攀登者1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

s=input()
s=s[1:len(s)-1]  #去掉开头的[和结尾的]
w=list(map(int,s.split(',')))  #转为数组
res=0
n=len(w)
for i in range(n):l,r=-10**9,-10**9  #初始化相邻元素值if i>0:l=w[i-1]if i+1<n:r=w[i+1]if w[i]>l and w[i]>r:res+=1
print(res)

在这里插入图片描述

攀登者2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def count_mountain_climbs(terrain, stamina):size = len(terrain)# 初始化数组 left_moves、right_moves,表示从左右两边攀爬到当前位置的代价left_moves, right_moves = [-1] * (size + 1), [-1] * (size + 1)# 计算从左边攀爬到当前位置的代价for i in range(size):if terrain[i] == 0 and i - 1 > 0 and terrain[i - 1] != 0:j = i - 1right_moves[i] = 0while j >= 0 and terrain[j] != 0:if terrain[j] > terrain[j + 1]:right_moves[j] = right_moves[j + 1] + 2 * (terrain[j] - terrain[j + 1])else:right_moves[j] = right_moves[j + 1] + (terrain[j + 1] - terrain[j])j -= 1# 计算从右边攀爬到当前位置的代价if terrain[i] == 0 and i + 1 < size and terrain[i + 1] != 0:j = i + 1left_moves[i] = 0while j < size and terrain[j] > 0:if terrain[j] > terrain[j - 1]:left_moves[j] = left_moves[j - 1] + 2 * (terrain[j] - terrain[j - 1])else:left_moves[j] = left_moves[j - 1] + (terrain[j - 1] - terrain[j])j += 1# 初始化数组 left_total、right_total,表示从左右两边攀爬到当前位置的总代价left_total, right_total = [-1] * (size + 1), [-1] * (size + 1)# 计算从左边攀爬到当前位置的总代价for i in range(1, size):if terrain[i] == 0:left_total[i] = 0else:if terrain[i - 1] > terrain[i]:left_total[i] = left_total[i - 1] + 2 * (terrain[i - 1] - terrain[i])else:left_total[i] = left_total[i - 1] + terrain[i] - terrain[i - 1]# 计算从右边攀爬到当前位置的总代价for i in range(size - 2, -1, -1):if terrain[i] == 0:right_total[i] = 0else:if terrain[i + 1] > terrain[i]:right_total[i] = right_total[i + 1] + 2 * (terrain[i + 1] - terrain[i])else:right_total[i] = right_total[i + 1] + terrain[i] - terrain[i + 1]climb_count = 0# 遍历山脉,判断是否可以攀爬for i in range(0, size):if terrain[i] > terrain[i - 1] and terrain[i] > terrain[i + 1]:min_cost = 10**15# 如果存在从左边攀爬到当前位置的代价,则更新 min_costif left_moves[i] != -1:min_cost = min(min_cost, left_moves[i] + left_total[i])# 如果存在从右边攀爬到当前位置的代价,则更新 min_costif right_moves[i] != -1:min_cost = min(min_cost, right_moves[i] + right_total[i])# 如果同时存在从左边和右边攀爬到当前位置的代价,则更新 min_costif left_moves[i] != -1 and right_moves[i] != -1:min_cost = min(left_moves[i] + right_total[i], right_moves[i] + left_total[i], min_cost)# 如果最小代价小于等于 stamina,则可攀爬,计数加一if min_cost <= stamina:climb_count += 1return climb_count# 从输入中读取整数数组 terrain
terrain_data = list(map(int, input().split()))# 从输入中读取目标值 stamina
stamina_value = int(input())# 输出计算结果
print(count_mountain_climbs(terrain_data, stamina_value))

在这里插入图片描述

分披萨

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

n = int(input())  # 输入披萨的数量
a = [int(input()) for i in range(n)]  # 输入每块披萨的美味值
dp = [[-1] * n for i in range(n)]  # 记忆化数组,用于存储已计算过的状态def solve(L, R):# “馋嘴“选择一块披萨吃掉,对应端点移动if a[L] > a[R]:L = (L+1) % nelse:R = (R+n-1) % n# 如果该状态已经计算过,则直接返回结果if dp[L][R] != -1:return dp[L][R]# 如果左右端点相同,则说明只剩下一块披萨,直接返回该披萨的美味值if L == R:dp[L][R] = a[L]else:# 分别计算选择左边披萨和选择右边披萨的情况下的最大美味值dp[L][R] = max(a[L] + solve((L+1)%n, R), a[R] + solve(L, (R+n-1)%n))return dp[L][R]ans = 0
# 枚举吃货第一步取哪块披萨
for i in range(n):# 计算当前情况下吃货最多能吃到的披萨的美味值,并更新答案ans = max(ans, solve((i+1)%n, (i+n-1)%n) + a[i])print(ans)  # 输出最多能吃到的披萨的美味值

在这里插入图片描述

机械绘图

在这里插入图片描述
在这里插入图片描述

n, e = map(int, input().split())
last_x = 0   # 记录上一个位置的横坐标
y = 0      # 记录起始点的纵坐标
area = 0    # 记录面积
for i in range(n):x, d = map(int, input().split())area += (x - last_x) * abs(y)   # 计算执行第i个指令后的增量面积y += d   # 更新纵坐标last_x = x   # 更新上一个位置的横坐标
area += (e - last_x) * abs(y)   # 计算终点的增量面积
print(area)

在这里插入图片描述

英文输入法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import re  # 导入re模块s = input()  # 读取输入的字符串s
t = input()  # 读取输入的字符串ts1 = re.split("[^a-zA-Z]", s)  # 使用正则表达式将字符串s按非字母字符分割
s2 = list(set(s1))  # 将分割后的结果转为集合去重,再转为列表
s2.sort()  # 对列表进行排序
s2 = list(filter(lambda x: x.startswith(t), s2))  # 过滤出以t开头的字符串
if len(s2) > 0:  # 如果过滤后的列表长度大于0print(" ".join(s2))  # 输出连接后的字符串
else:  # 否则print(t)  # 输出字符串t

在这里插入图片描述

小华最多能得到多少克黄金

在这里插入图片描述
在这里插入图片描述

from queue import Queuem, n, k = map(int, input().split(" "))
if m == 0 or n == 0:print(0)
else:arr = []res = 0for i in range(m):tem = []for j in range(n):x = sum(int(digit) for digit in str(i))y = sum(int(digit) for digit in str(j))if x + y <= k:tem.append(1)else:tem.append(0)arr.append(tem)q = Queue()q.put([0, 0])arr[0][0] = 0dirs = [-1, 0, 1, 0, -1]while not q.empty():cur = q.get()res += 1i, j = curfor k in range(4):x = i + dirs[k]y = j + dirs[k + 1]if x < 0 or x >= m or y < 0 or y >= n or arr[x][y] == 0:continuearr[x][y] = 0q.put([x, y])print(res)

在这里插入图片描述

分配土地

在这里插入图片描述
在这里插入图片描述

n, m = map(int, input().split())
mp = {}# 读取矩阵数据并记录非零元素的位置
for i in range(1, n + 1):j = 1for a in list(map(int, input().split())):if a != 0:if a not in mp:mp[a] = []mp[a].append((i, j))j += 1ans = 0
# 遍历记录的非零元素及其位置,计算包含该元素的矩形的最大面积
for u, v in mp.items():minrow, maxrow, mincol, maxcol = float('inf'), 0, float('inf'), 0# 计算当前非零元素所在矩形的行列范围for t in v:minrow = min(minrow, t[0])maxrow = max(maxrow, t[0])mincol = min(mincol, t[1])maxcol = max(maxcol, t[1])# 计算当前矩形的面积,并更新最大面积ans = max(ans, (maxrow - minrow + 1) * (maxcol - mincol + 1))print(ans)  # 输出最大矩形面积

在这里插入图片描述

字符串变换最小字符串

题目描述
给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。

变换规则:交换字符串中任意两个不同位置的字符。

输入描述
一串小写字母组成的字符串s

输出描述
按照要求进行变换得到的最小字符串。
在这里插入图片描述

s = input()
t = sorted(s)for i in range(len(s)):if s[i] != t[i]:for j in range(len(s) - 1, -1, -1):if s[j] == t[i]:s = s[:i] + s[j] + s[i+1:j] + s[i] + s[j+1:]breakbreakprint(s)

在这里插入图片描述

考勤信息

题目描述
公司用一个字符串来表示员工的出勤信息

absent:缺勤

late:迟到

leaveearly:早退

present:正常上班

现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:

缺勤不超过一次;

没有连续的迟到/早退;

任意连续7次考勤,缺勤/迟到/早退不超过3次。

输入描述
用户的考勤数据字符串
记录条数 >= 1;
输入字符串长度 < 10000;
不存在非法输入;

如:


2
present
present absent present present leaveearly present absent

输出描述
根据考勤数据字符串,如果能得到考勤奖,输出”true”;否则输出”false”,
对于输入示例的结果应为:


true false

在这里插入图片描述

mp={"absent":0,"late":1,"leaveearly":2,"present":3}  #出勤信息映射
def check(s):cnts=[0]*4  #统计每一项的次数m=len(s)for i in range(m):cnts[mp[s[i]]]+=1if i>6: cnts[mp[s[i-7]]]-=1if i>=6 and cnts[3]<4:  #正常上班天数<4,则说明其他天数超过3次return Falseif i and 1<=mp[s[i]]<=2 and 1<=mp[s[i-1]]<=2:  #连续的迟到,早退return Falsecount=0  #单独统计所有的缺勤次数for x in s:if mp[x]==0:count+=1return count<=1n=int(input())
for _ in range(n):s=input().split(' ')if check(s):print("true")else:print("false")

在这里插入图片描述

游戏分组/英雄联盟

题目描述
2020年题:

英雄联盟是一款十分火热的对战类游戏。每一场对战有10位玩家参与,分为两组,每组5人。每位玩家都有一个战斗力,代表着这位玩家的厉害程度。为了对战尽可能精彩,我们需要把玩家们分为实力尽量相等的两组。一组的实力可以表示为这一组5位玩家的战斗力和。现在,给你10位玩家的战斗力,请你把他们分为实力尽量相等的两组。请你输出这两组的实力差。

2023年题:

部门准备举办一场王者荣耀表演赛,有10名游戏爱好者参与,分5为两队,每队5人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把10名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队5名队员的评分总和。 现在给你10名参与者的游戏水平评分,请你根据上述要求分队最后输出这两组的实力差绝对值。 例: 10名参赛者的评分分别为5 1 8 3 4 6 710 9 2,分组为 (135 8 10) (24 679),两组实力差最小,差值为1。有多种分法,但实力差的绝对值最小为1。

输入描述
10个整数,表示10名参与者的游戏水平评分。范围在[1,10000]之间

输出描述
1个整数,表示分组后两组实力差绝对值的最小值.
在这里插入图片描述
在这里插入图片描述

a=list(map(int,input().split()))
ans=abs(sum(a[:5])-sum(a[5:]))
for i in range(1<<10):cnt=[0,0]val=[0,0]for j in range(10):cnt[(i>>j)&1]+=1val[(i>>j)&1]+=a[j]if cnt[0]==cnt[1]:ans=min(ans,abs(val[0]-val[1]))
print(ans)

在这里插入图片描述

精准核酸检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

while True:try:n = int(input())list_qz = list(map(int, input().split(",")))list_qz1 = list_qz.copy()list_rq = []for i in range(n):list_rq.append(list(map(int, input().split(","))))result = []vistied = []while list_qz:a = list_qz.pop(0)if a not in vistied:vistied.append(a)for i in range(n):if list_rq[a][i] == 1 and i != a:result.append(i)if sum(list_rq[i]) > 1:list_qz.append(i)result = [i for i in result if i not in list_qz1]print(len(set(result)))except:break

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索性数据分析EDA的数据可视化

大家好&#xff0c;数据可视化是探索性数据分析的重要组成部分&#xff0c;因为它有助于分析和可视化数据&#xff0c;以获得对数据分布、变量之间的关系和潜在异常值的启示性见解。Python具有丰富的库&#xff0c;可以快速高效地创建可视化。 在Python中&#xff0c;通常使用…

MIT 6.S081---Lab: locks

Memory allocator (moderate) 修改kernel/kalloc.c&#xff0c;修改kmem声明并定义结构体数组&#xff1a; 修改kernel/kalloc.c中的kinit函数&#xff0c;对kmemList进行初始化&#xff1a; 修改kernel/kalloc.c中的kfree函数&#xff0c;获取当前的cpuid并将释放的内存添加到…

C语言知识点总结00-C语言知识点目录

专栏主页&#xff1a; 数据结构算法程序设计基础C语言知识点总结https://blog.csdn.net/seeker1994/category_12585732.html 最优算法100例00-最优算法100例目录 数据结构知识点总结00-知识点目录 ...... C语言知识点目录 程序设计基础C语言知识点总结 1 概述 2 数…

CSS 【详解】响应式布局(明天内容)

响应式布局&#xff1a; 同一页面在不同的屏幕上有不同的布局&#xff0c;即一套代码自适应不同的屏幕。 常用 单位&#xff1a; 像素&#xff08;px&#xff09;&#xff1a;像素是最常用的长度单位&#xff0c;它表示屏幕上的一个物理像素点。例如&#xff0c;width: 200px; …

Java学习笔记------常用API(二)

Object 无有参构造 public Object() 空参构造 成员方法&#xff1a; public String toString() 返回对象的字符串表示 public boolean equals(object obj) 比较两个对象是否相等 Object默认用号比较地址值&#xff0c;需要重写才能比较属性值 protected O…

使用Anaconda创建Python指定版本的虚拟环境

由于工作的需要和学习的需要&#xff0c;需要创建不同Python版本的虚拟环境。 比如zdppy的框架&#xff0c;主要支持的是Python3.8的版本&#xff0c;但是工作中FastAPI主要使用的是3.11的版本&#xff0c;所以本地需要两套Python环境。 决定使用Anaconda虚拟环境管理的能力&…

【小白学机器学习8】统计里的自由度DF=degree of freedom, 以及关于df=n-k, df=n-k-1, df=n-1 等自由度公式

目录 1 自由度 /degree of freedom / df 1.1 物理学的自由度 1.2 数学里的自由度 1.2.1 数学里的自由度 1.2.2 用线性代数来理解自由度&#xff08;需要补充&#xff09; 1.2.3 统计里的自由度 1.3 统计学里自由度的定义 2 不同对象的自由度 2.1 纯公式的自由度&#…

xss.haozi.me靶场“0x0B-0x12”通关教程

君衍. 一、0x0B 实体编码绕过二、0x0C script绕过三、0x0D 注释绕过四、0X0E ſ符号绕过五、0x0F 编码解码六、0x10 直接执行七、0x11 闭合绕过八、0x12 闭合绕过 一、0x0B 实体编码绕过 我们首先构造payload进行测试&#xff1a; 这里我们可以看到全部转为了大写&#xff0c…

2024年3月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

一台GTX1080显卡的怪兽,我可不能错过这个机会!

标题&#xff1a;我花了30块钱买了一台电脑主机。 这个配置能赚钱吗&#xff1f; 1. 收购惊喜 那是一个阳光明媚的下午&#xff0c;我在水管修理店里闲逛。 突然&#xff0c;一位老顾客手里拿着一台旧电脑主机匆匆走了进来。 他说&#xff1a;“小王&#xff0c;你能帮我看看…

【算法训练营】周测3

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 如果需要答案代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 考题11-3 题目描述 输入格式 输出格式 输出到标准输出。 若可以通关&…

STM32的GPIO初始化配置-学习笔记

简介&#xff1a; 由于刚开始没有学懂GPIO的配置原理&#xff0c;导致后面学习其它外设的时候总是产生阻碍&#xff0c;因为其它外设要使用前&#xff0c;大部分都要配置GPIO的初始化&#xff0c;因此这几天重新学习了一遍GPIO的配置&#xff0c;记录如下。 首先我们要知道芯片…

力扣701. 二叉搜索树中的插入操作

思路&#xff1a;往二叉搜索树中插入一个值&#xff0c;树的结构有多种符合的情况&#xff0c;那我们可以选一种最容易的插入方式&#xff0c;反正只需要插入一个值而已&#xff0c;我们不难发现&#xff0c;不管插入什么值&#xff0c;都可以安排插入到叶子节点上。 再利用二叉…

传统SessionID,Cookie方式与SringSecurity+JWT验证方式

在Spring Boot框架中&#xff0c;可以使用Spring Session来处理会话管理。Spring Session允许开发者在不同的存储后端&#xff08;如Redis、数据库等&#xff09;之间共享和管理会话状态。通过Spring Session&#xff0c;开发者可以轻松地实现会话管理、会话失效以及跨多个节点…

Redux Toolkit

本文作者为 360 奇舞团前端开发工程师 阅读本文章前&#xff0c;需要先了解下 redux 的基本概念与用法&#xff0c;Redux Toolkit 是建立在 Redux 基础之上的工具包&#xff0c;因此需要对 Redux 的基本概念有一定的了解&#xff0c;包括 Action、Reducer、Store、Middleware 等…

【C语言】如何规避野指针

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 目录 一、概念&#xff1a; 二、野指针成因&#xff1a; 2.1. 指针未初始化 2.2 指针越界访问 3. 指针指向的空间释放 三、如何规避野指针 3.…

专题二 - 滑动窗口 - leetcode 904. 水果成篮 | 中等难度

leetcode 904. 水果成篮 leetcode 904. 水果成篮 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 904. 水果成篮 | 中等难度 1. 题目详情 你正在探访一家农场&#xff0c;农场从左到右种植…

OpenResty使用Lua大全(一)Lua语法入门实战

文章目录 系列文章索引一、OpenResty使用Lua入门1、hello world2、nginx内部变量 二、Lua入门1、简介1、hello world2、基本语法&#xff08;1&#xff09;注释&#xff08;2&#xff09;数据类型&#xff08;3&#xff09;变量&#xff08;4&#xff09;函数&#xff08;5&…

c++基础语法

文章目录 前言命名空间命名空间的使用 缺省参数缺省参数的使用 函数重载函数重载的作用函数重载的使用函数重载原理 引用引用的使用引用的使用场景引用和指针 extern Cinlineauto范围fornullptr 前言 大家好我是jiantaoyab&#xff0c;这篇文章给大家带来的是c语言没有的一些特…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典遗传算法&#xff08;GA&#xff09;对 需求拆分车辆路径规划问题&#xff08;SDVRP&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作&#xff0c;目前已经成熟的…