Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: SidritaParaFestejar en 02 de Mayo 2017, 01:11
-
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!
-
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
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
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
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
-
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