我必须通过用户输入检查拉丁方是否为真。但是我不知道该怎么做检查部分,它会检查每一列和每一行是否有重复的数字。
这是我想出的,但似乎无法正常工作:
// 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;
}
答案 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)
,编译器将生成用于访问二维数组的类似代码。因为二维数组被分配为内存中的大型一维数组。