线性插值
线性插值
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 */