我试图将不同的元素插入矩阵中。为此,我创建了一个[rows x columns]维数组,并将每个元素插入到矩阵中,然后在读取数组之后,如果矩阵的元素与数组中的元素相同,则用户重新引入将[m][n]
元素放入数组中。但这样做并不像我预期的那样工作,看起来也有些混乱;它怎么能更简单"?
void rellenarMatriz(int **a, int f, int c) {
int i, j, aux, k, l;
for(i = 0; i < f; i++) {
for(j = 0; j < c; j++) {
//Introducir numero
printf(" [%d][%d]> ", i+1, j+1);
scanf("%d", &a[i][j]);
//Comprobar que ese elemento no está en la matriz
contieneElemento(a, i, j);
}
printf("\n");
}
}
注意:这不是作业,我正在努力学习。
解?
void contieneElemento(int ** a, int ff, int cf) {
int i, j;
for(i = 0; i <= ff; i++) {
for(j = 0; j <= cf; j++) {
printf("[%d][%d]>\n", i + 1, j + 1);
do {
printf("> Elemento repetido.\n");
printf(" *[%d][%d]> ", ff + 1, cf + 1);
scanf("%d", &a[ff][cf]);
} while(a[i][j] == a[ff][cf]);
}
}
}
答案 0 :(得分:2)
最简单的方法只是查看矩阵/数组,看看你想要插入的元素是否已经存在。我建议你有一个单独的功能告诉你。
bool ya_tiene_elemento( int **a, int f, int c, int hasta_f, int hasta_c, int elt )
{
if (hasta_f > 0)
for (int i = 0; i < hasta_f-1; i++)
for (int j = 0; j < c; j++)
if (a[i][j] == elt) return true;
for (int j = 0; j <= hasta_c; j++)
if (a[hasta_f][j] == elt) return true;
return false;
}
这对玩具来说就足够了。
如果您希望显着提高效率,请考虑使用Bloom Filter来决定是否希望实际扫描矩阵/数组以进行匹配。
希望这有帮助。