当前位置: 首页 > news >正文

【华为机试】2023年真题B卷(python)-采样过滤

一、题目

题目描述:

在做物理实验时,为了计算物体移动的速率,通过相机等工具周期性的采样物体移动能离。由于工具故障,采样数据存在误差甚至相误的情况。需要通过一个算法过滤掉不正确的采样值,不同工具的故意模式存在差异,算法的各关门限会根据工具类型做相应的调整,请实现一个算法,计算出给定一组采样值中正常值的最长连续周期。
判断第1个周期的采样数据s0是否正确的规则如下(假定物体移动速率不超过10个单元前一个采样周期S[i-1]):
S[i]<=0,即为错误值
S[i]<S[i-1],即为错误值
S[i]-S[i-1]>=10,即为错误值·其它情况为正常值
判断工具是否故障的规则如下:
在M个周期内,采样数据为错误值的次数为T(次数可以不连续),则工具故障
判断故障恢复的条件如下:
产生故障后的P个周期内,采样数据一直为正常值,则故障恢复
错误采样数据的处理方式
检测到故障后,丢弃从故障开始到故障恢复的采样数据,在检测到工具故障之前,错误的采样数据,则由最近一个正常值代替;如果前面没有正常的采样值,则丢弃此采样数据
给定一段周期的采样数据列表S,计算正常值的最长连续周期。

二、输入输出

输入描述: 
故障确认周期数和故障次数门限分别为M和T,故障恢复周期数为P。第i个周期,检测点的状态为S[i]
输入为两行,格式如下:
M T P
s1 s2 s3 ... 
M、t 和 e的取值范围为[1100000] 
s1取值范围为[0,100000],从0开始编号
输出描述:
输出一行,输出正常值的最长连续周期

三、示例

示例:
输入:
10 6 3
-1 1 2 3 100 10 13 9 10
输出:
8

四、参考代码 

# -*- coding: utf-8 -*-
'''
@File    :   2023-B-采样过滤.py
@Time    :   2023/12/23 22:20:50
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''m, t, p = list(map(int, input().split()))
s_list = list(map(int, input().split()))items = [0] * len(s_list)  # 用于标记采样数据的列表,初始值都为0for i in range(len(s_list)):# 检查采样数据是否符合要求if s_list[i] <= 0 or (i > 0 and (s_list[i] - s_list[i - 1] >= 10 or s_list[i] < s_list[i - 1])):items[i] = 0else:items[i] = 1i = 0
while i < len(s_list):if items[i] == 0 and i > 0 and items[i - 1] == 1:# 如果当前数据错误且前一个数据正确,则将当前数据修正为前一个数据s_list[i] = s_list[i - 1]items[i] = 1error_num, corrent, j = 0, 0, iwhile m > 0 and j < len(s_list):if items[j] == 0:error_num += 1if error_num >= t:corrent = j - 1 if j > 0 else 0j += 1if error_num >= t:if i + t == len(s_list) - 1:# 如果错误数据的范围正好到达列表末尾,则将其修正为前一个正确数据for k in range(i, corrent + 1):s_list[k] = s_list[i - 1] if i > 0 else s_list[0]items[k] = 1breakelif i + m <= len(s_list):# 如果错误数据的范围在m之内,则将其修正为前一个正确数据for k in range(i, len(s_list)):if k < corrent + 1:items[k] = 1else:items[k] = 0else:# 如果错误数据的范围超过m,则将范围内的数据修正为前一个正确数据for k in range(i, i + m):if k < corrent + 1:items[k] = 1else:items[k] = 0if i + m + p >= len(s_list) + 1:# 如果错误数据的范围超过列表末尾,则将列表末尾的数据之后的所有数据标记为错误数据for k in range(i, len(s_list)):items[k] = 0else:items[k], i = 0, k + pelse:i += 1res, location = 0, 0
for item in range(len(items)):if items[item] != 1:if location > res:res = locationlocation = 0else:location += 1print(max(res, location))  # 输出最长连续周期
http://www.lryc.cn/news/266110.html

相关文章:

  • 编译opencv和opencv_contrib
  • 每次maven刷新jdk都要重新设置
  • 《PySpark大数据分析实战》-18.什么是数据分析
  • 【小白攻略】php 小数转为百分比,保留两位小数的函数
  • electron GPU process isn‘t usable. Goodbye
  • ApsaraMQ Serverless 演进之路,助力企业降本
  • redis 从0到1完整学习 (六):Hash 表数据结构
  • 阿里云江苏省中小企业补贴5000元上云补贴金
  • PID算法
  • Linux bridge开启hairpin模拟测试macvlan vepa模式
  • 连续执行函数和alert与focus死循环事件
  • 向量投影:如何将一个向量投影到矩阵的行向量生成子空间?
  • Ubuntu18.04安装GTSAM库(亲测可用)
  • SpringBoot中常见配置配置,MySQL、Redis、MinIO等
  • 面向LLM的App架构——技术维度
  • ArkUI - 状态管理
  • C++ 学习系列 -- C++ 中的多态行为
  • Spring Cloud中实现Feign声明式服务调用客户端
  • 【网络编程】网络通信基础——简述TCP/IP协议
  • 观察者模式 Observer
  • Hadoop入门学习笔记——七、Hive语法
  • 采用SpringBoot框架+原生HTML、JS前后端分离模式开发和部署的电子病历编辑器源码(电子病历评级4级)
  • HTML表单
  • Http 请求体和响应体中重要的字段
  • 最新国内可用使用GPT4.0,GPT语音对话,Midjourney绘画,DALL-E3文生图
  • 【量化金融】证券投资学
  • 【Bash】重点总结
  • Git安装和使用教程,并以gitee为例实现远程连接远程仓库
  • Hadoop入门学习笔记——一、VMware准备Linux虚拟机
  • CSS3新增特性