检查每一列和每一行是否重复

时间:2018-11-19 22:02:54

标签: c++ arrays multidimensional-array

我必须通过用户输入检查拉丁方是否为真。但是我不知道该怎么做检查部分,它会检查每一列和每一行是否有重复的数字。

这是我想出的,但似乎无法正常工作:

// arr= input by user in array, and n= array length by user input     
bool latin(int**arr,int n)
    {
      int times=0;
      int s;

        for(int j=0;j<n;j++)
            {
            for(int i=0; i<n;i++){

                if (arr[i][j]==s) times++;

            }
        }

    if (times != 1) return false;
    else return true;
    }

1 个答案:

答案 0 :(得分:0)

您可能要传递一个维数组:

bool latin(int const * const arr, unsigned int capacity)
{
  int counter = 0;
  int s; // Please initialize this.
  for (int row = 0; row < MAXIMUM_ROWS; ++row)
  {
    for (int column = 0; column < MAXIMUM_COLUMNS; ++column)
    {
       const int value = *(arr + row * MAXIMUM_COLUMNS + column);
       if (value == s) // Remember s is not initialized.
       {
         ++counter;
       }
    }
  }
  return counter == 1;
}

在上面的代码中,可以通过以下公式访问数组中的插槽:

value = *(arr + row * MAXIMUM_COLUMNS + column);

只要指定列数,例如(int arr[][MAXIMUM_COLUMNS], int capacity),编译器将生成用于访问二维数组的类似代码。因为二维数组被分配为内存中的大型一维数组。