2013-05-21 5 views
0

У меня есть одномерный массив со случайными элементами, пробитый сеткой m * n. Я хочу узнать количество строк и общее количество столбцов, присутствующих в нем.Поиск общего количества столбцов в массиве

Вот как 1-мерная матрица: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 19,20]

Я хочу, чтобы относиться к нему как:

0102030405

0607080910

1112131415

1617181920

Теперь я хочу, чтобы найти общий REO и общую колонку. общей строки выполняется следующим образом:

for (int i = 0; i < totalRows; i++) 
     { 
      for (int j = 0; j < totalColumns; j++) 
      { 
       rowTotal[i] += numbers[temp + j]; 
      }    
      temp += totalColumns; 
     } 

Я пытаюсь сделать то же самое с колонной. Вот код:

for (int i = 0; i < totalColumns; i++) 
     { 
      tempk = 0; 

      for (int j = 0; j < totalRows; j++) 
      { 
       blockTotal[i] += numbers[i+j+tempk]; 
       tempk += totalColumns; 

      } 
     } 

Am не в состоянии получить в общей сложности колонки, как и предполагалось. Пожалуйста помоги.

+0

Почему вместо этого не использовать многомерный массив? –

+0

вы можете получить результат с помощью первого цикла и заменить 'rowTotal [i] + =' на 'columnTotal [j] + ='. – didierc

ответ

3

Вы можете получить как в том же цикле

for (int i = 0; i < totalRows; i++) 
{ 
    for (int j = 0; j < totalColumns; j++) 
    { 
     rowTotal[i] += numbers[i * totalColumns + j]; 
     blockTotal[j] += numbers[i * totalColumns + j]; 
    }    
} 
+0

Этот код работает только для матрицы M * M. Не для M * N. Как я могу изменить этот код, чтобы он работал для M * N? – Vivek

0

Итого по строкам

for(int r = 0; r < totalRows; r++) 
{ 
    for(int c = 0; c < totalColumns; c++) 
    { 
    rowTotal[r] += numbers[r * totalColumns + c]; 
    } 
} 

Итого по столбцам

for(int c = 0; c < totalColumns; c++) 
{ 
    for(int r = 0; r < totalRows; r++) 
    { 
    colTotal[c] += numbers[r * totalColumns + c]; 
    } 
} 
+0

Это должно быть 'r * totalColumns + c', а не' r * totalColumns + totalColumns' – juharr

+0

Моя ошибка, спасибо за совет –

+0

Этот код работает только для матрицы M * M. Не для M * N. Как я могу изменить этот код, чтобы он работал для M * N? – Vivek

1

Проще всего сделать, это написать небольшой метод, который транслирует «логический» (строка, столбец) адрес с индексом :

int numberAt(int row, int col) 
{ 
    return numbers[row * totalColumns + col]; 
} 

int[] colTotals = new int[totalColumns]; 
int[] rowTotals = new int[totalRows]; 

for (int row = 0; row < totalRows; ++row) 
{ 
    for (int col = 0; col < totalColumns; ++col) 
    { 
     int number = numberAt(row, col); 
     rowTotals[row] += number; 
     colTotals[col] += number; 
    } 
} 

Редактировать в ответ на вопрос в комментариях ниже:

Вот полный компилируемый пример, который демонстрирует, что работает на не квадратный массив:

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace Demo 
{ 
    class Program 
    { 
     // Array will 4x3 (rows x cols): 
     // 
     // 1 2 3 | 6 
     // 4 5 6 | 15 
     // 7 8 9 | 24 
     // 10 11 12 | 33 
     // --------- 
     // 22 26 30 

     int[] numbers = Enumerable.Range(1, 12).ToArray(); 
     int totalColumns = 3; 
     int totalRows = 4; 

     int numberAt(int row, int col) 
     { 
      return numbers[row * totalColumns + col]; 
     } 

     void test() 
     { 
      int[] colTotals = new int[totalColumns]; 
      int[] rowTotals = new int[totalRows]; 

      for (int row = 0; row < totalRows; ++row) 
      { 
       for (int col = 0; col < totalColumns; ++col) 
       { 
        int number = numberAt(row, col); 
        rowTotals[row] += number; 
        colTotals[col] += number; 
       } 
      } 

      Console.WriteLine("Row totals"); 

      foreach (int rowTotal in rowTotals) 
       Console.Write(rowTotal + " "); 

      Console.WriteLine("\nCol totals"); 

      foreach (int colTotal in colTotals) 
       Console.Write(colTotal + " "); 

      Console.WriteLine(); 
     } 

     static void Main() 
     { 
      new Program().test(); 
     } 
    } 
} 
+0

Этот код работает только для матрицы M * M. Не для M * N. Как я могу изменить этот код, чтобы он работал для M * N? – Vivek

+0

@Vivek It *. * Работает для M * N - я добавил образец кода к моему ответу, чтобы продемонстрировать. –

Смежные вопросы