[編程題]線性插值

Talk is cheap, show me the code.

一、問題描述

信號測量的結果包括測量編號和測量值。存在信號測量結果丟棄及測量結果重複的情況。

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個數據組

輸出描述:

輸出整理後的結果

輸入例子:

2 3
4 5
5 7

輸出例子:

4 5
5 7

二、問題分析

這道題又是一道坑題,題意不明,第一行給出的n完全沒用,而且對於除法的定義沒有給出是帶小數除法還是自動取整的除法。

#include <iostream>
using namespace std;

int main()
{
    int m, n;
    while (cin >> m >> n)
    {
        int k, v;
        if (m == 1)
        {
            cin >> k >> v;
            cout << k << " " << v << endl;
        } else {
            cin >> k >> v;
            m--;
            int a, b;
            a = k;
            b = v;
            cout << a << " " << b << endl;
            while (m--)
            {
                cin >> k >> v;
                if (k == a)
                    continue;
                else {
                    for ( int i = 1; i <= k - a - 1; i++)
                    {
                        cout << a + i << " " << b + ((v - b)/(k - a)) * i << endl;
                    }
                    cout << k << " " << v << endl;
                    a = k;
                    b = v;
                }
            }

        }
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章