题目描述
信号测量的结果包括测量编号和测量值。存在信号测量结果丢弃及测量结果重复的情况。
1.测量编号不连续的情况,认为是测量结果丢弃。对应测量结果丢弃的情况,需要进行插值操作以更准确的评估信号。
采用简化的一阶插值方法,由丢失的测量结果两头的测量值算出两者中间的丢失值。
假设第M个测量结果的测量值为A,第N个测量结果的测量值为B。则需要进行(N-M-1)个测量结果的插值处理。进行一阶线性插值估计的第N+i个测量结果的测量值为A+( (B-A)/(N-M) )*i (注:N的编号比M大。)
例如:只有测量编号为4的测量结果和测量编号为7的测量结果,测量值分别为4和10
则需要补充测量编号为5和6的测量结果。
其中测量编号为5的测量值=4 + ((10-4)/(7-4))*1 = 6
其中测量编号为6的测量值=4 + ((10-4)/(7-4))*2 = 8
2.测量编号相同,则认为测量结果重复,需要对丢弃后来出现的测量结果。
请根据以上规则进行测量结果的整理。
详细描述:
接口说明
原型:
intCleanUpMeasureInfo(MEASURE_INFO_STRUCT* pOriMeasureInfo,intnOriMINum,intnMaxMIRst, MEASURE_INFO_STRUCT* pMeasureInfoRst);
输入参数:
MEASURE_INFO_STRUCT* pOriMeasureInfo: 原始测量结果内容,以结构数组方式存放。测量编号已经按升序排列。MEASURE_INFO_STRUCT定义包含编号和测量值,见OJ.h
int nOriMINum: 原始测量结果个数。
int nMaxMIRst: 整理的测量结果最大个数。
输入参数:
MEASURE_INFO_STRUCT* pMeasureInfoRst: 整理的测量结果
返回值:
Int
整理的测量结果个数
输入描述:
输入说明
1 输入两个整数m, n
2 输入m个数据组
输出描述:
输出整理后的结果
示例1
输入
2 3
4 5
5 7
输出
4 5
5 7
思路:1.重复的值,后插入的值不加入列表
2.列表中最后一个值小于插入的值-2:需要线性插值
3.其他加入列表中
4.线性插值:步长:截断取整
import math
def insert(x,y,numlist):
last_x,last_y=numlist[-1][0],numlist[-1][1]
step = math.trunc((y - last_y) / (x - last_x))#向下截断取整
for i in range(1,x-last_x):
numlist.append([last_x+i,last_y+i*step])
while True:
try:
m,n=[int(i) for i in input().split()]
numlist=[]
for i in range(m):
x,y=[int(i) for i in input().split()]
if len(numlist)>0:
if numlist[-1][0]==x:#刚插入的值x=列表末尾的x,后输入的值不插入列表中
continue
elif numlist[-1][0]+1<x:#刚插入值<=x-2
insert(x,y,numlist)#需要线性插值
numlist.append([x,y])
else:
numlist.append([x,y])
else:
numlist.append([x,y])#第一个值加入进去
for eachnum in numlist:
print(eachnum[0],eachnum[1])
except:
break