Определить количество отрезков строк с учетом начального индекса и длины - PullRequest
2 голосов
/ 02 мая 2011

У меня есть матричный начальный индекс моих данных и количество элементов моих данных и мне нужно найти количество строк, которые охватывают данные. например матрица

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

Мои данные отмечены знаком x. Я знаю стартовый индекс 4, длина данных 8. И мне нужно определить количество строк, охватывающих эти данные, 2 в этом случае. (простое выполнение длины / 6 во многих случаях выключено одним, конечно, для этого должна быть простая формула ..)

Ответы [ 3 ]

0 голосов
/ 02 мая 2011
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, но после вычитания количества частично заполненных строк

0 голосов
/ 02 мая 2011

Если вам нужно только количество строк, которое вы можете вычислить

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

, что в данном случае

num_rows = (4 + 8 + 6 - 1) / 6 = 17 / 6 = 2
0 голосов
/ 02 мая 2011

Если вы знаете только 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
}

, где % - оператор модуля (или напоминания)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...