線性插值/華為機試(C/C++)
題目描述
訊號測量的結果包括測量編號和測量值。存在訊號測量結果丟棄及測量結果重複的情況。
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
程式碼:非本人所寫
//第四十五題 線性插值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m, n;
while (scanf("%d %d", &m, &n) != EOF)
{
int M, A, B, N, i, j;
scanf("%d %d", &M, &A);
printf("%d %d\n", M, A);
for (i = 1; i<m; i++)
{
scanf("%d %d", &N, &B);
if (N == M)
continue;
else
{
for (j = 1; j < N - M; ++j)
{
printf("%d %d\n", M + j, A + ((B - A) / (N - M))*j);
}
printf("%d %d\n", N, B);
M = N;
A = B;
}
}
}
return 0;
}
感覺題目描述的不清晰。