none
Como generar parejas aleatorias RRS feed

  • Pregunta

  • Tengo este ejercicio en el cual tengo q generar unas parejas aleatorias partiendo de un array del cual dependo para aprobar el curso y me he quedad atascado. El enunciado dice lo siguiente: 

    El programa debe tener un menú con las opciones “Introducir nombre”, “¡Amigo invisible!” y “Salir”. La primera opción debe permitir introducir el nombre de un nuevo miembro del grupo para ser almacenado en un array (considérese que el grupo no va a tener más de 30 personas). La segunda opción debe realizar la asignación entre unos miembros y otros, de modo que cada persona esté asociada a otra para hacerle el regalo. La asociación debe realizarse de manera aleatoria, pero con la restricción de que ninguna persona debe poder ser asignada a sí misma para regalar. 

    He echo varios codigos pero ninguno con exito. Os dejo los 2 más recientes:

    Primer codigo:

     Console.WriteLine("Bienvenido al juego del amigo invisible!");
                string[] nombres= new string[30];
                bool salir = false;
                int personas=30 ;
                int cant = 1;
                
                while (salir != true)
                {

                    int opc;
                    Console.WriteLine("1-Introducir parejas 2-Amigo invisible   3-Introducir parejas    4- Añadir más personas  5-Salir ");
                    while (!int.TryParse(Console.ReadLine(), out opc))
                    {
                        Console.Write("Valor incorrecto, inserta de nuevo: ");
                    }
                    switch (opc)
                    {
                        case 1:

                            Nombres(ref nombres, ref personas);

                            break;

                        case 2:
                            Parejas(nombres,ref personas);
                            break;

                        case 3:
                            Parejitas(cant);
                            break;

                        case 4:
                            MasParejas(ref personas);
                            break;
                        
                        case 5:
                            salir = true;
                            break;
                    }
                }


                static void Nombres(ref string[] nombres, ref int personas)
                {
                    Console.WriteLine("Cuantas personas sois");
                    while (!int.TryParse(Console.ReadLine(), out personas))
                    {
                        Console.Write("Valor incorrecto, inserta de nuevo: ");
                    }
                    nombres = new string[personas];
                    Console.WriteLine("introduzca" + personas + "nombres");
                    for (int a = 0; a < personas; ++a)
                    {
                        nombres[a] = Console.ReadLine();
                    }
                    for (int a = 0; a >= personas;)
                    {
                        Console.WriteLine("Las personas que jugaran contigo serán:" + nombres[a]);

                    }

                    Console.Clear();
                }
             
                static void Parejas(string[] nombres, ref int personas)
                {

                    Random rnd = new Random();
                    bool aprobado = false;
                    int[] usados = new int[personas];

                    Console.WriteLine("Hagamos las parjeas");
                    foreach (string persons in nombres)
                    {

                        do
                        {

                            for (int i = 0; i < personas; i++)
                            {
                                int h = rnd.Next(0, personas - 1);
                                do
                                {
                                   
                                    string name = nombres[h];
                                    if (name != null)
                                    {
                                        if (persons?.CompareTo(name) != 0 && usados.Contains(h))
                                        {
                                            aprobado = true;
                                            Console.WriteLine($"{nombres[i]} va con {nombres[h]}");
                                        }
                                    }
                                    usados[i] = h;
                                } while ( usados.Contains(h));

                            }

                        } while (!aprobado);

                    };

                }
              

                }


                static void Parejitas(int cant)
                {

                    Console.WriteLine("Hagamos las parejas por separado.");
                  
                    string[] parejitas = new string[cant];
                    do
                    {
                        if (cant % 2 != 0)
                        {
                            while (!int.TryParse(Console.ReadLine(), out cant))
                            {
                                Console.Write("Valor incorrecto, inserta de nuevo: ");
                            }
                        }
                    } while (cant % 2 != 0);
                    Console.WriteLine("Introduzca los nombres de las parejas");
                    for (int i = 0; i < cant; i++)
                    {
                        parejitas[i] = Console.ReadLine();
                    }
                    for (int i = 0; i < cant; i++)
                    {
                        Console.WriteLine($"las parejas son {parejitas[i]} con {parejitas[i + 1]}");
                    }
                    Console.Clear();
                }

                static void MasParejas(ref int personas)
                {
                     int más;
                        
                            Console.WriteLine("¿Cuanta gente quiere añadir?");
                            while (!int.TryParse(Console.ReadLine(), out más))
                            {
                                Console.Write("Valor incorrecto, inserta de nuevo: ");
                            }
                            int total = personas + más;
                            do
                            {
                                if (total >= 30 || más % 2 != 0)
                         
                                {
                                    Console.WriteLine("Ha superado el limite de personas o introducido un número inpar, el limite es 30");
                                    while (!int.TryParse(Console.ReadLine(), out más))
                                    {
                                        Console.Write("Valor incorrecto, inserta de nuevo: ");
                                    }

                                }

                            } while (total >= 30 || más % 2 != 0);
                            int a = 1;
                            string[] personasañadidas = new string[más];
                            Console.WriteLine("Introduzca los nombres de los nuevos");
                            for (int i = 0; i < más; i++)
                            {
                                personasañadidas[i] = Console.ReadLine();
                            }

                            
                                for (int j = 0;j < personasañadidas.Length; j++)
                                {
                                    if (j< personasañadidas.Length-1)
                                    {
                                        Console.WriteLine($" Parejas: {personasañadidas[j]}  con  {personasañadidas[j + 1]}");
                                    }
                                    if (j==personasañadidas.Length-1)
                                    {
                                        Console.WriteLine($" Parejas: {personasañadidas[j]}  con  {personasañadidas[0]}");
                                    }
                                   
                             

                                }
                }

     

    Codigo 2:

     bool salir = false;
                int cantidadPersonas=30 ;
                string[] Personas = new string[cantidadPersonas];

                while (salir != true)
                {

                    int opc;
                    Console.WriteLine("1-Introducir parejas 2-Amigo invisible   3-Salir ");
                    while (!int.TryParse(Console.ReadLine(), out opc))
                    {
                        Console.Write("Valor incorrecto, inserta de nuevo: ");
                    }
                    switch (opc)
                    {
                        case 1:
                            MeterNombres(ref cantidadPersonas, ref Personas);
                          

                            break;

                        case 2:
                          GenerarParejas(cantidadPersonas, Personas);
                            break;


                        case 3:
                            salir = true;
                            break;
                    }



                }

                static void MeterNombres(ref int cantidadPersonas, ref string[] Personas) {
                    Console.WriteLine("¿Cuantos sois?");
                    cantidadPersonas = Convert.ToInt32(Console.ReadLine());
                    do
                    {
                        if (cantidadPersonas % 2 != 0)
                        {
                            cantidadPersonas = Convert.ToInt32(Console.ReadLine());
                        }
                    } while (cantidadPersonas % 2 != 0);

                    Console.WriteLine("Introduzca los nombres de las personas que vayan a participar:");
                    for (int i = 0; i < cantidadPersonas; i++)
                    {
                        Personas[i]= Console.ReadLine();

                    }
                    Console.Clear();
                    Console.WriteLine("Los participantes son:");
                    for (int i = 0; i < cantidadPersonas; i++)
                    {
                        Console.WriteLine(Personas[i]);
                    }

                }

                static void GenerarParejas(int cantidadPersonas, string[] Personas)
                {
                    Console.WriteLine("Comencemos a generar las parejas...");
                    string[] PersonasCopia = new string[cantidadPersonas];
                    Random rnd = new Random();
                    bool Repeticiones = false;
                    int NumeroAleatorio;
                    for (int i = 0; i < cantidadPersonas; i++)
                    {
                        PersonasCopia[i] = Personas[i];
                    }

                    for (int i = 0; i < cantidadPersonas; i++)
                    {
                        do
                        {
                            Repeticiones = false;
                            NumeroAleatorio = rnd.Next(0, cantidadPersonas);

                            if (Personas[i] == PersonasCopia[i])
                            {
                                Repeticiones = true;
                            }
                        } while (Repeticiones = false); ;
                    }

                }

            }
        }
    }

    Necesito ayuda, toda ayuda sera bienvenida. Muchas gracias

    viernes, 17 de julio de 2020 19:12

Todas las respuestas

  • Hola Jaiminator21,

      

    Gracias por levantar tu consulta en los foros de MSDN.

    Recuerda que en este foro no se resuelven tareas o proyectos escolares ni se desarrollan códigos en base a enunciados. 

    Gracias por usar los foros de MSDN.  

      

    Eric Ruiz

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    viernes, 17 de julio de 2020 20:30
    Moderador
  • Esta es mi propuesta.

    static int cantidadPersonas = 30;
        static string[] Personas = new string[cantidadPersonas];
        static string[] Parejas = new string[cantidadPersonas];
    
        static void Main(string[] args)
        {
          bool salir = false;
          
          while (salir != true)
          {
            int opc;
            Console.WriteLine("1-Introducir parejas 2-Amigo invisible   3-Salir ");
            while (!int.TryParse(Console.ReadLine(), out opc))
                 Console.Write("Valor incorrecto, inserta de nuevo: ");
            
            switch (opc)
            {
              case 1:
                MeterNombres();
                break;
              case 2:
                GenerarParejas();
                MostrarParejas();
                break;
              case 3:
                salir = true;
                break;
            }
          }
        }
    
        static void MeterNombres()
        {
          Console.WriteLine("¿Cuantos sois?");
          cantidadPersonas = Convert.ToInt32(Console.ReadLine());
          do
            if (cantidadPersonas % 2 != 0)
               cantidadPersonas = Convert.ToInt32(Console.ReadLine());
          while (cantidadPersonas % 2 != 0);
    
          Personas = new string[cantidadPersonas];
          Console.WriteLine("Introduzca los nombres de las personas que vayan a participar:");
          for (int i = 0; i < cantidadPersonas; i++)
            Personas[i] = Console.ReadLine();
    
          Console.Clear();
          Console.WriteLine("Los participantes son:");
          for (int i = 0; i < cantidadPersonas; i++)
            Console.WriteLine(Personas[i]);
        }
       
        static void GenerarParejas()
        {
          Console.WriteLine("Comencemos a generar las parejas...");
          Parejas = new string[cantidadPersonas];
          Random rnd = new Random();
          int Num1,Num2;
          int NumPareja = 0;
          
          for (int i = 0; i < cantidadPersonas/2; i++)
          {
            do
              Num1 = rnd.Next(cantidadPersonas);
            while (!SinPareja(Personas[Num1]));
            
            Parejas[NumPareja] = Personas[Num1];
            NumPareja++;
    
            do
              Num2 = rnd.Next(cantidadPersonas);
            while (!SinPareja(Personas[Num2]));
    
            Parejas[NumPareja] = Personas[Num2];
            NumPareja++;
          }
        }
    
        static bool SinPareja(String nom)
        {
          bool sinParja = true;
          for (int i = 0; i < cantidadPersonas; i++)
          {
            if (Parejas[i] == nom)
            {
              sinParja = false;
              break;
            }
          }
    
          return sinParja;
        }
    
        static void MostrarParejas()
        {
          Console.WriteLine();
          int ParejaNro = 1;
          for (int i = 0; i < Parejas.Length; i++)
          {
            String linea = ParejaNro.ToString() + ": " + Parejas[i] + " <--> ";
            i++;
            ParejaNro++;
            linea+= Parejas[i];
            Console.WriteLine(linea);
          }
          Console.WriteLine();
        }




    • Editado AntiWork sábado, 18 de julio de 2020 4:31
    viernes, 17 de julio de 2020 21:59