给定起始索引和长度,确定行跨度的数量

时间:2011-05-02 16:37:27

标签: algorithm

我有一个数据的矩阵起始索引和我的数据元素的数量 我需要找到数据跨越的行数。 例如矩阵

 0              5 
-------------------
|  |  |  |  |x |x |  
-------------------
|x |x |x |x |x |x |  
-------------------
|  |  |  |  |  |  |  
-------------------
|  |  |  |  |  |  |  
-------------------

我的数据标有x。我知道起始索引4,数据的长度8。 我需要确定此数据跨越的行数,在这种情况下为2。 (在很多情况下,只做长度/ 6是一个,当然必须有一个简单的公式..)

3 个答案:

答案 0 :(得分:0)

如果你只知道offset(即起始列的索引),size(即有多少数据),cols(即最大列数),你想要计算您的数据将跨越多少行,您可以

int get_spanned_rows(int offset, int size, int cols) {
  int spanned_rows = (offset + size) / cols
  if ( ( (offset + size ) % cols) != 0 )
    spanned_rows++
  return spanned_rows
}

其中%是模数(或提醒)运算符

答案 1 :(得分:0)

int calc_rows(int start,int length){
    int rows = 0;
    int x= 0;
    if (start != 0){
        x = 6%start;
        rows+=1;
    }
    if ((start+length) % 6 != 0){
        x +=(start+length) % 6;
        rows+=1;
    }
    rows+= (length - x)/6;
    return rows;
}

通过除以6计算行数,但减去部分填充的行数后计算

答案 2 :(得分:0)

如果您只想要可以计算的行数

num_rows = (offset + size + cols - 1) / cols

在这种情况下是

num_rows = (4 + 8 + 6 - 1) / 6 = 17 / 6 = 2