在矩阵C 中使用Bool函数检查重复数字

check duplicate numbers with bool function in matrix c++

本文关键字:检查 函数 数字 Bool      更新时间:2023-10-16

我创建了一个随机数

的矩阵[10] [10]
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        matrix[i][j] = rand() % 100 ;
    }   
}

,但是我需要使用布尔函数进行检查重复数字,并且如果再次随机使用相同的使用。我可以做什么?

测试重复项的有效方法是将已插入矩阵中的元素存储在std::vector中并用于std::find。这允许检查是否已经包含在先前存储的元素中的新生成的随机数。如果发现它,则应生成另一个随机数并重复测试。

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
bool alreadySelected(int n, int nvalues, int values[][10]) {
  std::vector<int> v(&values[0][0], &values[0][0] + nvalues );
  return (std::find(v.begin(), v.end(), n) != v.end());
}
int main() {
  int matrix[10][10];      
  for (int i = 0; i < 10; i++) {
    int n;
    bool dupe;
    for (int j = 0; j < 10; j++) {
    int nvalues = i * 10 + j;
    do {
      n = std::rand() % 100 ;
      dupe = alreadySelected( n, nvalues, matrix );
    } while ( dupe );
    matrix[i][j] = n;
    std::cout << matrix[i][j] << " ";
   }
   std::cout << "n";
  }
}

生成此类矩阵的一种更简单的方法是使用std :: Random_shuffle。

有多种实现此目的的方法。

  1. 编写一个返回bool并需要10*10矩阵大小的函数。计算所有数字的总和。将此结果与1 ... 99的数字总和进行比较。如果两者都匹配,则没有重复返回true,否则重复返回false。可以使用n(n 1)/2来计算1..99的总和,其中n =99。
  2. 在函数中创建大小为100的数组。将所有数组元素以0的元素初始化。迭代矩阵,将矩阵元素用作数组的索引。如果数组在该位置包含1个,则在该索引0中获得重复元素,否则将数组元素0。

实施第一种方法

#include <iostream>
#include <cstdlib>
#include <iomanip>
#define ROW 10
#define COL 10
#define MOD 100
int main()
{
 int mat[ROW][COL];
 int sum = 0;
 int range_sum = ((MOD-1)*(MOD))/2; // n = MOD-1, sum = n(n+1)/2
 while(true){
    sum = 0;
    for(int i = 0; i < ROW; i++){
        for(int j = 0; j < COL; j++){
            mat[i][j] = rand()%MOD;
            sum += mat[i][j];
        }
    }
    if(sum==range_sum){
        break;
    }
 }
 for(int i = 0; i < ROW; i++){
    for(int j = 0; j < COL; j++){
        std::cout << std::setw(2) << mat[i][j] << "  ";
        }
        std::cout << std::endl;
    }
 return 0;
}