数组 int A[100] , int B[8200]
分别对应 90 -100 ,步长 0.1 的数据,其中 A可以和该数据量刚好匹配,B则更精确,数据量更大,但不能被100整除。这时我怎么从 B 里面取100个点放到数组 int C[100], 使 C 里面的数据与A对应的数据最相近?好像不能一一对应,也好像4舍5入是不准确的
分别对应 90 -100 ,步长 0.1 的数据,其中 A可以和该数据量刚好匹配,B则更精确,数据量更大,但不能被100整除。这时我怎么从 B 里面取100个点放到数组 int C[100], 使 C 里面的数据与A对应的数据最相近?好像不能一一对应,也好像4舍5入是不准确的
(99.9-0.05,99.9+0.05),(100.0-0.05,无穷大)
再将B中的数据放入上述各区间中,
然后按区间中各点到中心点(90.0,90.1……99.9,100.0)的差值(可为负)排序,
取 差值最接近0的数 放入C中对应的位置.
如果某区间中没有点,则可以取与其最近相邻区间中与它距离最近的值,
这样C中就可得到与A最相近的数据了
{
C[i] = B[i*82];
}呵呵,只取到 8118 ,差不多这个意思
然后用A中的值逐一到B中进行二分查找,
每次
返回一个近似点(索引位置),
然后取回该位置前后两个点的值,
比较出与A值最近的:)
{
C[i] = B[i*82];
}
这个不可取的,如果是 int B[8196] 呢,难道 C[i] = B[i*81.96] ?
int iIndex;
for(int i=0;i<100;i++)
{
iIndex=BSearch(A[i]);
if(A[i] == B[iIndex]) C[i]=B[iIndex];
else if(A[i] < B[iIndex])
{
if(abs(A[i]-B[iIndex-1]) < B[iIndex]-A[i]) C[i]=B[iIndex-1];
else C[i]=B[iIndex];
}
else
{
if(abs(A[i]-B[iIndex+1]) < A[i]-B[iIndex]) C[i]=B[iIndex+1];
else C[i]=B[iIndex];
}
}