华为机试-算法一

寻找身高相近的小朋友

小明今年升学到了小学1年纪来到新班级后,发现其他小朋友身高参差不齐
然后就想基于各小朋友和自己的身高差,对他们进行排序请帮他实现排序
输入描述
第一行为正整数 h和n
0<h<200 为小明的身高
0<n<50 为新班级其他小朋友个数
第二行为n各正整数
h1 ~ hn分别是其他小朋友的身高
取值范围0<hi<200
且n个正整数各不相同
输出描述
输出排序结果,各正整数以空格分割
和小明身高差绝对值最小的小朋友排在前面
和小明身高差绝对值最大的小朋友排在后面
如果两个小朋友和小明身高差一样
则个子较小的小朋友排在前面

    示例一
    输入
    100 10
    95 96 97 98 99 101 102 103 104 105
    输出
    99 101 98 102 97 103 96 104 95 105

    说明  小明身高100
    班级学生10个  身高分别为95 96 97 98 99 101 102 103 104 105,
    按身高差排序后结果为:99 101 98 102 97 103 96 104 95 105。

    输入
    100 10
    101 102 103 104 105 96 97 95 99 98
def sort_children_by_height_diff(h, n, children_heights):  
    # 将小明的身高加入到小朋友的身高列表中  
    children_heights.append(h)  
      
    # 根据身高差对小朋友进行排序  
    sorted_heights = sorted(children_heights, key=lambda x: abs(x - h) if x != h else float('inf'))  
      
    # 移除小明的身高  
    sorted_heights.remove(h)  
      
    # 将排序后的身高列表转换为字符串,以空格分隔  
    sorted_str = ' '.join(map(str, sorted_heights))  
      
    return sorted_str  
  
# 读取输入  
h, n = map(int, input().split())  
children_heights = list(map(int, input().split()))  
  
# 输出排序结果  
print(sort_children_by_height_diff(h, n, children_heights))

解释:

  1. sort_children_by_height_diff函数接收三个参数:小明的身高h,小朋友的个数n,以及小朋友的身高列表children_heights。
    首先将小明的身高加入到小朋友的身高列表中,以便一起进行排序。
    使用sorted函数对小朋友的身高进行排序,排序的关键在于计算每个小朋友与小明的身高差,并按照身高差进行排序。如果身高差相同,则按照身高本身进行排序(身高较小的排在前面)。这里使用lambda表达式来定义排序的关键字。
    排序完成后,从排序后的身高列表中移除小明的身高。
    最后将排序后的身高列表转换为字符串,以空格分隔,并返回该字符串作为排序结果。
    在主程序中,首先读取输入的小明身高、小朋友个数和小朋友身高列表。然后调用sort_children_by_height_diff函数进行排序,并输出排序结果。

围棋的气

围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19x19=361个交点,对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。
“气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知:
1、在棋盘的边缘上的棋子最多有3口气(黑1),在棋盘角点的棋子最多有2口气(黑2),其它情况最多有4口气(白1)
2、所有同色棋子的气之和叫作该色棋子的气,需要注意的是,同色棋子重合的气点,对于该颜色棋子来说,只能计算一次气,比如下图中,黑棋一共4口气,而不是5口气,因为黑1和黑2中间红色三角标出的气是两个黑棋共有的,对于黑棋整体来说只能算一个气。
3、本题目只计算气,对于眼也按气计算,如果您不清楚“眼”的概念,可忽略,按照前面描述的规则计算即可。
现在,请根据输入的黑棋和白棋的坐标位置,计算黑棋和白起一共各有多少气?
输入描述:
输入包括两行数据,如:
0 5 8 9 9 10
5 0 9 9 9 8
1、每行数据以空格分隔,数据个数是2的整数倍,每两个数是一组,代表棋子在棋盘上的坐标;
2、坐标的原点在棋盘左上角点,第一个值是行号,范围从0到18;第二个值是列号,范围从0到18。
3、举例说明:第一行数据表示三个坐标(0,5)、(8,9)、(9,10)
4、第一行表示黑棋的坐标,第二行表示白棋的坐标。
5、题目保证输入两行数据,无空行且每行按前文要求是偶数个,每个坐标不会超出棋盘范围。
输出描述:
8 7
两个数字以空格分隔,第一个数代表黑棋的气数,第二个数代表白棋的气数。
补充说明:
示例1
输入:
0 5 8 9 9 10
5 0 9 9 9 8
输出:
8 7
说明:
如果将输入数据放到棋盘上,数数黑棋一共8口气:
数数白棋一共7口气:

解题思路
解题思路:

创建一个19x19的二维数组表示棋盘,初始化为0,表示空点。
根据输入,将黑棋和白棋的坐标放入棋盘,并标记为1表示黑棋,2表示白棋。
遍历棋盘,对于每个非空点,检查其上下左右四个方向的相邻点,计算该点的气数。
统计黑棋和白棋的总气数。
输出结果。
题解代码
Python题解代码

def counting(alias, enemy):
    count = set(alias)
    for a in alias:
        x, y = map(int, a.split("_"))
        if x > 0:
            count.add(f"{x - 1}_{y}")
        if x < maxSide:
            count.add(f"{x + 1}_{y}")
        if y > 0:
            count.add(f"{x}_{y - 1}")
        if y < maxSide:
            count.add(f"{x}_{y + 1}")

    res = len(count) - len(alias)
    for e in enemy:
        if e in count:
            res -= 1
    return res


locBlacks = input().split()
locWhites = input().split()
blacks = [f"{locBlacks[i]}_{locBlacks[i + 1]}" for i in range(0, len(locBlacks), 2)]
whites = [f"{locWhites[i]}_{locWhites[i + 1]}" for i in range(0, len(locWhites), 2)]
maxSide = 18
print(counting(blacks, whites), counting(whites, blacks))

Python题解代码讲解
函数定义:

counting(alias, enemy): 该函数用于计算棋子的气数。

alias: 表示当前颜色(黑或白)的棋子坐标列表。

enemy: 表示对方颜色的棋子坐标列表。

函数首先将当前颜色的棋子坐标添加到count集合中,然后遍历每个棋子,根据其上下左右四个方向的相邻点,将相邻点的坐标添加到count中。最后,通过计算集合的大小减去当前颜色棋子的个数,得到当前颜色棋子的总气数。

输入处理:

通过input().split()读取输入,得到黑棋和白棋的坐标字符串数组locBlacks和locWhites。

将坐标字符串数组转换为坐标列表blacks和whites,其中每个坐标使用{row}_{col}的格式表示。

调用counting函数计算黑棋和白棋的总气数,并输出结果。

用连续自然数之和来表达整数

一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。
注意!答案仅作为参考(实际考试中下列代码通过用例100%,但不代表最优解)
一个整数可以由连续的自然数之和来表示给定一个整数计算该整数有几种连续自然数之和的表达式并打印出每一种表达式。

输入描述
一个目标整数t 1<= t <=1000

输出描述
1.该整数的所有表达式和表达式的个数
如果有多种表达式,自然数个数最少的表达式优先输出
2.每个表达式中按自然数递增输出

具体的格式参见样例
在每个测试数据结束时,输出一行"Result:X"
其中X是最终的表达式个数
输入
9

输出
9=9
9=4+5
9=2+3+4
Result:3

说明 整数9有三种表达方法:

示例二
输入
10
输出
10=10
10=1+2+3+4
Result:2

题目解析

本题可以考虑使用滑动窗口 比如输入 9,则生成一个数组 arr = [1,2,3,4,5,6,7,8,9].然后用 left、right 指针同时指向 arr 的索引 0,并取 arr[O]为初始 sum 值 left 指针和 right 指针的移动逻辑如下
在这里插入图片描述
right 指针从左向右开始移动,每移动一次就计算 left~right 之间的子数组和赋值给 sum, 并且判断:

sum > target 若 true,则 left++,sum-=arr[left]

sum === target,若true,则保存此时的子数组到res中,然后right++,计算sum+=arr[right]。

sum < target,若 true,则 right++,计算 sum+=arr[right]

当 right 和 left 都移动到数组尾部时,结束

输入
t = int(input())
print(t)
输出
def result():
    arr = [i+1 for i in range(t)]
    ans = []
    l = 0
    r = 1
    total = arr[l]
    while l < t:
        if total > t:
            total -= arr[l]
            l += 1
        elif total == t:
            ans.append(arr[l:r])
            # 然后挪动指针
            total -= arr[l]
            l += 1
            if r>=t:
                # 单个都大
                break
            else:
                total += arr[r]
                r += 1
        else:
            total += arr[r]
            r += 1
    ans.sort(key=lambda x:len(x))
    for i in ans:
        print(f"{t}={'+'.join(map(str,i))}")
    print(f"Result:{len(ans)}")
t = 9
result()
输出
9=9
9=4+5
9=2+3+4
Result:3

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Muduo库编译学习(1)

1.muduo库简介 muduo是由Google大佬陈硕开发&#xff0c;是一个基于非阻塞IO和事件驱动的现代C网络库&#xff0c;原生支持one loop per thread这种IO模型&#xff0c;该库只支持Linux系统&#xff0c;网上大佬对其褒贬不一&#xff0c;作为小白用来学习就无可厚非了。 git仓库…

阅读笔记 | Transformers in Time Series: A Survey

阅读论文&#xff1a; Wen, Qingsong, et al. “Transformers in time series: A survey.” arXiv preprint arXiv:2202.07125 (2022). 这篇综述主要对基于Transformer的时序建模方法进行介绍。论文首先简单介绍了Transformer的基本原理&#xff0c;包括位置编码、多头注意力机…

二十三、剖析 LinkedList

剖析 LinkedList 本文为书籍《Java编程的逻辑》1和《剑指Java&#xff1a;核心原理与应用实践》2阅读笔记 ArrayList随机访问效率很高&#xff0c;但插入和删除性能比较低&#xff1b;LinkedList同样实现了List接口&#xff0c;它的特点与ArrayList几乎正好相反。除了实现了L…

springboot240基于Spring boot的名城小区物业管理系统

基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制&#xff0c;采用人工登记的方式保存相关数…

来不及了!大学必须完成的四件事!

老师们常说&#xff0c;上大学就轻松了 其实不然 大学不是人生的终点&#xff0c;而是新的起跑线 不是休息站&#xff0c;而是进入社会的最后冲刺跑道 大学生活苦乐参半&#xff0c;成人世界即将来临 出了校门&#xff0c;你会发现社会复杂多变&#xff0c;需要不断学习 稍…

社区店选址评估:利用大数据选址的技巧与策略

在当今数字化的时代&#xff0c;利用大数据进行社区店选址评估已成为一种高效、科学的方法。作为一名开鲜奶吧5年的创业者&#xff0c;我将分享一些利用大数据选址的技巧与策略&#xff0c;帮助你找到最适合的店铺位置。 1、确定目标商圈 在选址之前&#xff0c;首先要明确自己…

airTest连接雷电模拟器后,打开横屏游戏,airTest设备窗显示游戏是横屏,雷电模拟器却显示竖屏

目录 airTest连接雷电模拟器后&#xff0c;打开横屏游戏&#xff0c;airTest设备窗显示游戏是横屏&#xff0c;雷电模拟器却显示竖屏 原因&#xff1a;雷电模拟器4会出现兼容性问题。 解决&#xff1a;升级到雷电模拟器9.0.66(9)&#xff0c;可解决该问题。

输出梯形 C语言

解析&#xff1a;这个输出图形的题就是一个找规律加数学计算&#xff0c;我们发现每行比上一行多两个*&#xff0c;最后一行的*表达式为h&#xff08;h-1&#xff09;*2&#xff0c;即3*h-2&#xff0c;那么每一行就是一个先输出最后一行&#xff0d;当前行*个数个空格&#xf…

用Java语言创建的Spring Boot项目中,如何传递List集合呢?

前言&#xff1a; 在上篇文章中&#xff0c;用Java语言创建的Spring Boot项目中&#xff0c;如何传递数组呢&#xff1f;&#xff1f;-CSDN博客&#xff0c;我们了解到Spring Boot项目中如何传递数组&#xff0c;但是&#xff0c;对于同类型的List集合&#xff0c;我们又该如何…

搜素题目(蓝桥杯 C++ 代码+注解)

目录 题目一&#xff08;小朋友崇拜圈&#xff09;&#xff1a; 代码&#xff1a; 题目二&#xff08;穿越雷区&#xff09;&#xff1a; 代码&#xff1a; 题目三&#xff08;分考场&#xff09;&#xff1a; 代码&#xff1a; 题目四&#xff08;受伤的皇后&#xff09…

蓝桥ACM培训-队列

前言&#xff1a; 第三天的练习&#xff0c;今天主要与队列queue有关。 正文&#xff1a; Problem:A 周末舞会-队列&#xff1a; #include <bits/stdc.h> using namespace std; int m,n,k,tmp1,tmp2; queue<int>q1,q2; int main() {cin>>m>>n>>…

飞天使-学以致用-devops知识点2-安装sonarqube

文章目录 安装sonarqube查看暴露出去的端口 生成服务token创建webhook服务创建项目 安装sonarqube apiVersion: apps/v1 kind: Deployment metadata:name: postgres-sonarnamespace: kube-devops spec:replicas: 1selector:matchLabels:app: postgres-sonartemplate:metadata:…

SQL-Labs靶场“29-31”关通关教程

君衍. 一、二十九关 基于错误的WAF单引号注入1、源码分析2、HTTP参数污染3、联合查询注入4、updatexml报错注入 二、三十关 基于错误的WAF双引号注入1、源码分析2、联合查询注入3、updatexml报错注入 三、三十一关 基于错误的WAF双引号括号注入1、源码分析2、联合查询注入3、up…

个人项目介绍2:地球卫星篇

项目需求&#xff1a; 在项目中显示三维地球及主要城市标注&#xff0c;接收服务端发来的实施卫星数据&#xff0c;显示卫星姿态角&#xff0c;陀螺角&#xff0c;飞轮等数据&#xff1b;可自定义模拟产生更多卫星轨迹&#xff1b;可模拟显示卫星躲避陨石动画&#xff1b;可展…

内含资料下载丨黄东旭:2024 现代应用开发关键趋势——降低成本、简化架构

作为一名工程师和创业者&#xff0c;创办 PingCAP 是我进入创新世界的一次深潜。这段旅程既有令人振奋的发现&#xff0c;也充满令人生畏的不确定性。作为这次探险之旅见证的 TiDB &#xff0c;现在已在全球服务超过 3000 家企业&#xff0c;其中有已经实现了商业成功的大公司&…

Canvas笔记03:Canvas元素功能、属性、获取、原理等一文讲透

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas元素的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas元素是HTML5中的一个重…

(二)逻辑回归与交叉熵--九五小庞

什么是逻辑回归 线性回归预测的是一个连续值&#xff0c;逻辑回归给出的“是”和“否”的回答 Singmoid sigmoid函数是一个概率分布函数&#xff0c;给定某个输入&#xff0c;它将输出为一个概率值 逻辑回归损失函数 平方差所惩罚的是与损失为同一数量级的情形&#xff0…

设计模式(十四)中介者模式

请直接看原文: 原文链接:设计模式&#xff08;十四&#xff09;中介者模式_设计模式之中介模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 写了很多篇设计模式的…

浅谈S-VIDEO接口静电浪涌防护

S-Video 接口曾经在一些旧款的电视机、录像机、游戏机等设备上广泛应用&#xff0c;用于传输视频信号。不过&#xff0c;随着技术的发展&#xff0c;S-Video 接口已经逐渐被其他更先进的接口所取代&#xff0c;比如 HDMI、DVI 等。 现在S-video接口广泛应用于电视、监视器、摄…

计算机视觉基础知识(二)---数字图像

像素 像素是分辨率的单位;构成位图图像的最基本单元;每个像素都有自己的颜色; 图像分辨率 单位英寸内的像素点数;单位为PPI(Pixels Per Inch),为像素每英寸;PPI表示每英寸对角线上所拥有的像素数目:,x:长度像素数目,y:宽度像素数目,Z:屏幕大小;屏幕尺寸(大小)指的是对角线长…
最新文章