线性插值
线性插值
http://www.nowcoder.com/questionTerminal/91b4c0f9fa9545a582e5b38bb9f6b90e
/* 基本思路: 题目输入的n是没什么用的。输入m组数据,每组数据保护编号、测量值
单层循环遍历数组,若序号重复,temp++查找下一个数据的下标,若序号不连续,进行线性插值
*/
#include<iostream>
using namespace std;
int num[1000], value[1000];
void buzhi(int m, int n, int index_m, int index_n){ // m是前面的序号,n是后边的序号, index_m ,index_n分别是对应的下标
int temp;
for(int i = m + 1; i < n; i++){
temp = value[index_m] + (value[index_n]-value[index_m])/(n - m)*(i-m);
cout << i << " ";
cout << temp << endl;
}
}
int main(){
int m, n;
while(cin >> m >> n){
for(int i = 0; i < m; i++){
cin >> num[i] >> value[i];
}
int temp=0;
for(int i = 0; i < m-1, temp < m; i=temp){
temp=i+1;
cout << num[i] << " " << value[i] << endl;
while(num[i] == num[temp]) temp++;
if(num[i] != num[temp]-1){ // 如果不连续
buzhi(num[i], num[temp], i, temp);
}
}
for(int i = 0; i < 1000; i++) num[i]={0};
for(int i = 0; i < 1000; i++) value[i]={0};
}
return 0;
}
/*
测试数据:
6 3
2 4
2 5
2 6
5 10
5 11
7 22
7 23
*/
360集团公司氛围 419人发布