如何将不同的元素插入数组?

时间:2015-11-27 19:48:07

标签: c arrays

我试图将不同的元素插入矩阵中。为此,我创建了一个[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]);
        }
    }  
}

1 个答案:

答案 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来决定是否希望实际扫描矩阵/数组以进行匹配。

希望这有帮助。