数组 int A[100] ,  int B[8200] 
 分别对应 90 -100 ,步长 0.1 的数据,其中 A可以和该数据量刚好匹配,B则更精确,数据量更大,但不能被100整除。这时我怎么从 B 里面取100个点放到数组 int C[100], 使 C 里面的数据与A对应的数据最相近?好像不能一一对应,也好像4舍5入是不准确的

解决方案 »

  1.   

    不妨划分出以下100个区间:(无穷小,90.0+0.05),(90.1-0.05,90.1+0.05),……,
    (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最相近的数据了
      

  2.   

    这还简单B 有8200个数据,取出100个,那么 8200/100=82 取出数据for( i = 0 ;i < 100 ; i ++ )
    {
        C[i] = B[i*82];
    }呵呵,只取到 8118 ,差不多这个意思
      

  3.   

    将B排序,
    然后用A中的值逐一到B中进行二分查找,
    每次
    返回一个近似点(索引位置),
    然后取回该位置前后两个点的值,
    比较出与A值最近的:)
      

  4.   

    for( i = 0 ;i < 100 ; i ++ )
    {
        C[i] = B[i*82];
    }
     这个不可取的,如果是 int B[8196] 呢,难道     C[i] = B[i*81.96] ?
      

  5.   

    Sort(B);
    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];
       }
        
    }