Autor Tema: C# encontrar el elemento o número que se repite más veces en un array (arreglo)  (Leído 22428 veces)

SidritaParaFestejar

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Buenas Noches!

Tengo un problema en c# que no me estaria saliendo y quisiera saber si alguien seria tan amable de subirlo ya que esto de programar no lo entiendo muy bien y por ahi hay algun paso que no lo estoy teniendo en cuenta

El problema es:

Se desea realizar un programa que le entregue a un usuario 6 numeros distintos entre el 0 y el 40 ordenados de menor a mayor.
Se debe generar 1000 numeros al azar  entre el 0 - 40 y seleccionar los 6 numeros que salieron mas cantidad de veces. En caso de ser mas de seis por empate, se debe volver a sortear los numeros. Si el empate persiste mas de 5 veces indicarlo en pantalla y continuar buscando.


Desde ya muchas gracias y me darian una gran mano, ya que mi problemas es hallar los 6 numeros que mas se repiten y ordenarlos.

Saludos!
« Última modificación: 18 de Junio 2017, 12:26 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola SidritaParaFestejar, para plantear consultas es conveniente leer las normas sobre cómo publicar en los foros, disponibles en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Hay diferentes maneras para encontrar el número más frecuente en un array

Usando Hashtable

Código: [Seleccionar]
class MainClass
    {
 
        static void MaxOccurrence(int[] array, Hashtable hs)
        {
            int mostCommom = array[0];
            int occurences = 0;
            foreach (int num in array)
            {
                if (!hs.ContainsKey(num))
                {
                    hs.Add(num, 1);
                }
                else
                {
                    int tempOccurences = (int)hs[num];
                    tempOccurences++;
                    hs.Remove(num);
                    hs.Add(num, tempOccurences);
 
                    if (occurences < tempOccurences)
                    {
                        occurences = tempOccurences;
                        mostCommom = num;
                    }
                }
            }
            foreach (DictionaryEntry entry in hs)
            {
                Console.WriteLine("{0}, {1}", entry.Key, entry.Value);
            }
            Console.WriteLine("The commmon numer is " + mostCommom + " And it appears " + occurences + " times");
        }
 
        public static void Main(string[] args)
        {
 
            int[] array = new int[20] { 3, 6, 8, 5, 3, 5, 7, 6, 4, 3, 2, 3, 5, 7, 6, 4, 3, 4, 5, 7 };
            Hashtable hs = new Hashtable();
            MaxOccurrence(array, hs);
 
        }
    }

Da como resultado:

8,1
7,3
6,3
5,4
4,3
3,5
2,1
The common number is 3 and it appears 5 times

Usando Dictionary

Código: [Seleccionar]
class MainClass
    {
 
        public static void MaxOccurrence(int[] numbers)
        {
            var counts = new Dictionary<int, int>();
            foreach (int number in numbers)
            {
                int count;
                counts.TryGetValue(number, out count);
                count++;
                //Automatically replaces the entry if it exists;
                //no need to use 'Contains'
                counts[number] = count;
            }
            int mostCommonNumber = 0, occurrences = 0;
            foreach (var pair in counts)
            {
                if (pair.Value > occurrences)
                {
                    occurrences = pair.Value;
                    mostCommonNumber = pair.Key;
                }
            }
            Console.WriteLine("The most common number is {0} and it appears {1} times",
                mostCommonNumber, occurrences);
        }
 
        public static void Main(string[] args)
        {
 
            int[] array = new int[20] { 3, 6, 8, 5, 3, 5, 7, 6, 4, 3, 2, 3, 5, 7, 6, 4, 3, 4, 5, 7 };
            MaxOccurrence(array);
 
        }

Resultado: The common number is 3 and it appears 5 times

Usando LINQ

Código: [Seleccionar]
class MainClass
    {
 
        static void MaxOccurrence(int[] numbers)
        {
            var groups = numbers.GroupBy(x => x);
            var largest = groups.OrderByDescending(x => x.Count()).First();
            Console.WriteLine("The most common number is {0} and it appears {1} times", largest.Key, largest.Count());
        }
 
        public static void Main(string[] args)
        {
 
            int[] array = new int[20] { 3, 6, 8, 5, 3, 5, 7, 6, 4, 3, 2, 3, 5, 7, 6, 4, 3, 4, 5, 7 };
            MaxOccurrence(array);
 
        }     
 
    }

Resultado: The common number is 3 and it appears 5 times

Saludos

SidritaParaFestejar

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Tenes razon de escribir en que codigo pido disculpas!

Un solo tema mas necesitaria que el software sea escrito con estructuras "For" y "While"

No soy muy bueno, igualmente agradezco mucho de tu ayuda!

P/D: espero la posible respuesta

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".