如何手动检查3x3阵列中的重复项?

人气:725 发布:2022-10-16 标签: multidimensional-array c++ unique function-definition nested-loops

问题描述

我正在处理一项任务,其中我编写了一个布尔函数来检查数组中的重复项。

我想看看是否有1到9之间的数字出现多次,如果没有出现,则返回true或语句。但是,我不得不遍历数组并完成检查。如何将make_array()函数中的数组合并到这个..bool语句应该检查该函数,但无论我如何编写,它都不会。

#include <iostream>
#include <ctime>
using namespace std;


int numbers[3][3] = {};

void make_array() 
{
  for (int row = 0; row < 3; row++)
  {
    for (int column = 0; column < 3; column++) 
    {
       numbers[row][column] = rand() % 9 + 1;
       cout << numbers[row][column] << " ";
    }
    cout << endl;
  }
}

bool appears_once()
{
    bool unique = true;

    for ( int copy_row = 0; copy_row < 3; copy_row++ )
    {
        for ( int copy_column = copy_row + 1; copy_column < 3; copy_column++ )
        {
            if (numbers[copy_row][copy_row] == numbers[ copy_column][ copy_column] ) 
            unique = true;
            cout << unique;
        }
    }

    return !unique;
    
}
int main() 
{
  int row, column = 0;
  srand(time(0));
  make_array();
  appears_once();
}

推荐答案

此内部FOR循环

for (int ccolumn = check_row + 1; ccolumn < 3; ccolumn++) 
{
  if (check_row != ccolumn) 
  {
    return true;
  }
  else
  {
   return false;
  }

}

没有任何意义。至少没有数组元素的比较。

例如,可以通过以下方式定义函数

bool appears_once()
{
    bool unique = true;

    for ( size_t i = 0; unique && i < 9; i++ )
    {
        for ( size_t j = i + 1; unique && j < 9; j++ )
        {
            if ( numbers[i / 3][i % 3] == numbers[ j / 3 ][ j % 3] ) unique = false;
        }
    }

    return unique;
}

521