1. 程式人生 > >線性插值/華為機試(C/C++)

線性插值/華為機試(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;
}

感覺題目描述的不清晰。