Cuente cuántas veces aparece un número en la matriz si aparece más de una vez, devuelva verdadero?

Su pregunta es algo ambigua. Por ejemplo, el número en cuestión, ¿está especificado por el usuario o es una entrada estándar o es cualquier número en la matriz?

Aquí está mi implementación (en C) de cómo lo haría. Voy a utilizar una entrada de prueba. En esta implementación, si un número aparece más de una vez, el estado del rastreador será VERDADERO. De lo contrario, FALSE será devuelto. También se devuelve el valor del contador.

#include
#include
#include

typedef struct repNumber {
estado char *
valor int
} repNum;

repNum countNum (int sz, int myarray [], int N) {
contador de int = 0;
seguidor de repNum;
tracker.state = “FALSE”;

para (int i = 0; i <sz; i ++) {
si (myarray [i] == N)
contador ++;
}
si (contador> 0)
tracker.state = “TRUE”;
tracker.value = contador;
rastreador de retorno
}

int main (int argc, char * argv []) {
// una matriz de muestra
int myarray [] = {1, 2, 4, 4, 5, 6};

// obtener la entrada del número del usuario
int N;
printf (“Ingrese un número para verificar \ n”);
scanf (“% d”, & N);

// Revisa la repetición en myarray
int size = (int) (sizeof (myarray) / sizeof (myarray [0]));
prueba de repNum = countNum (tamaño, myarray, N);
printf (“El número de repeticiones de% d en esta matriz es% d \ n”, N, test.value);
printf (“El estado es:% s \ n”, test.state);

devuelve 0;
}

Nota: Decidí definir un tipo de datos que devuelve el estado (FALSO o VERDADERO) y el valor del contador.

Sería mucho más fácil hacerlo, si la lista está ordenada, no importa, en orden ascendente o descendente. Porque, entonces encontrarás los mismos números lado a lado.

Ej. Array – [1,5,6,8,7,1,6,5,9]

el código para C sería como: (función)

int Check_Repeat_Number (int _Number)
{
int _Count = 0;
para (i = 0; i if (_Number == Array [i]) {
_Count ++;
}
}
si (_Count> 1) {
devuelve 1;
} else {
devuelve 0;
}

Quizás haya algunos errores de sintaxis, ya que estoy más involucrado en la programación de lotes ( archivo de lotes ) en estos días. Por lo tanto, la sintaxis está fuera de mi mente. Pero, la lógica sigue siendo la misma incluso en el antiguo lenguaje de piedra.

Preguntas que hacer:

  1. ¿Es un número o un número específico para verificar?
  2. ¿Está ordenada la matriz?

Suponiendo que hay un número específico para buscar y que la matriz no está ordenada … la idea más sencilla (usando C #):

público bool FindDupes (número int, int [] array)
{
var encontrado = falso;
para (int i = 0; i si (número == matriz [i]) {
si se encuentra) {
devuelve verdadero
}
encontrado = verdadero;
}
}
falso retorno;
}

O utilizando el método Exists integrado en una matriz, y un delegado para verificar si se encuentra un segundo número:

public bool FindDupesDelegate (número int, int [] array)
{
var encontrado = falso;
devuelve Array.Exists (array, delegate (int a) {
si (numero == a) {
si se encuentra) {
devuelve verdadero
}
encontrado = verdadero;
}
falso retorno;
});
}

O realizar lo mismo a través de Linq en un enumerable (no solo una matriz sino cualquier tipo de colección):

public bool FindDupesLinq (número int, colección IEnumerable )
{
var encontrado = falso;
return return collection.Contains (número, delegado (int a, int b) {
si (a == b) {
si se encuentra) {
devuelve verdadero
}
encontrado = verdadero;
}
falso retorno;
});
}

El más óptimo utilizando la búsqueda lineal más rápida posible dependiendo del sistema, incluso podría estar usando instrucciones especiales de la CPU como SSE2 (dependiendo de la configuración del compilador y la optimización):

public bool FindDupesOptimal (número int, int [] array)
{
var found = Array.IndexOf (array, number);
return (encontrado> = 0) && (Array.IndexOf (matriz, número, encontrado + 1)> 0);
}

Si la matriz está ordenada, los duplicados se colocarán uno al lado del otro. Por lo tanto, realizar una búsqueda binaria podría ser incluso más rápido. Luego simplemente verifique si el valor antes / después también es el mismo:

public bool FindDupesSorted (int number, int [] array)
{
if (array.Length> 1) {
var found = Array.BinarySearch (array, número);
si (encontrado <0) {
falso retorno;
}
si (encontrado == 0) {
matriz de retorno [1] == número;
} else if (found == (array.Length – 1)) {
matriz de retorno [encontrado – 1] == número;
}
retorno (matriz [encontrado – 1] == número) || (matriz [encontrado + 1] == número);
}
falso retorno;
}

La respuesta más simple:

int resultado = 0;
para (int num: array)
si (num == numero)
resultado ++;
resultado de retorno> 1

Este es probablemente el más rápido, ya que no tiene ifs.