none
Gerar números a partir de um conjunto de números RRS feed

  • Pergunta

  • Bom dia!

    Preciso gerar números aleatórios, sem repetição, que leve em conta o conjunto dos números 01, 06, 09 e 15.

    Só achei uma forma de gerar números aleatórios, mas sem o intervalo acima. 

    Alguém aqui sabe como fazer isso?


    A persistência e determinação são, por si sós, onipotentes.

    terça-feira, 9 de janeiro de 2018 12:32

Respostas

  • Boa noite, Junior

    Segue código testadinho.

    Se atender, marque como útil/resposta.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
                
            }
    
            
    
            private void button1_Click(object sender, EventArgs e)
            {
            ListBox_Resultado.Items.Clear();
    
            txt_limite_inferior.Text = txt_limite_inferior.Text.Trim();
            txt_limite_superior.Text = txt_limite_superior.Text.Trim();
            txt_Qtd_Num_Sequencia.Text = txt_Qtd_Num_Sequencia.Text.Trim();
    
            txt_limite_inferior.Text = "1"; //somente para os testes
            txt_limite_superior.Text = "50"; //somente para os testes
            txt_Qtd_Num_Sequencia.Text = "20"; //somente para os testes
                      
    
            int I, J, numero; //auxiliares
            int int_qtd_sequencia = Convert.ToInt32 (txt_Qtd_Num_Sequencia.Text); //número de elementos da sequencia
            int int_limite_inferior = Convert.ToInt32 (txt_limite_inferior.Text); //limite inferior da sequencia
            int int_limite_superior = Convert.ToInt32 (txt_limite_superior.Text); //limite superior da sequencia
    
            int [] matriz = new int [int_qtd_sequencia];
            int [] matriz2 = new int [int_qtd_sequencia];
            int [] numeros_inclusao_obrigatoria  = new int [] {1, 4, 9, 16, 25, 36}; //números com inclusão obrigatória, aqui tem que ter uma rotina para carregá-los
            Random GeradorDeNumerosAleatorios   = new Random ();
    
               for (I = 0; I < int_qtd_sequencia; I++)
               {
                   matriz[I] = -1; //seto a matriz ou array em -1
               }
    
                     
               for (I = 0; I < int_qtd_sequencia; I++)
                {
            
                    do
                        {
                        numero = GeradorDeNumerosAleatorios.Next(int_limite_inferior , int_limite_superior  + 1); // seleciono um número aleatório
                        }
                     while ( matriz.Contains(numero)); //verifico se não está na matriz, pois pode haver duplicidade na escolha
                                     
                        matriz[I] = numero; //carrego na matriz
                 }
    
              
    
                for (I = 0; I < numeros_inclusao_obrigatoria.Count(); I++)//para cada número obrigatório
                {
    
                    if (!(matriz.Contains(numeros_inclusao_obrigatoria[I] ))) //se o número obrigatório selecionado não estiver na matriz preenchida
                    {
                        for (J = 0; J < int_qtd_sequencia; J++) //verifica em toda asequencia
                        {
    
                            if (!(numeros_inclusao_obrigatoria.Contains(matriz[J]))) //verifica para não substituir um dos números obrigatórios por outro
                            {
                                matriz[J] = numeros_inclusao_obrigatoria[I]; //substitui um dos números da matriz por um dos obrigatórios
                                break;
                            }
                        }
                    }
                }
    
               
                for (I = 0; I < int_qtd_sequencia ; I++) //para evitar vícios na sequencia dos números obrigatórios, fazemos nova seleção aleatória da matriz e carregamos na matriz2
                {
                     do
                     {
                        numero = GeradorDeNumerosAleatorios.Next(0, int_qtd_sequencia ); // seleciono um número aleatório
                     }
                     while (matriz2.Contains(matriz[numero])); //verifico se não está na matriz2, pois pode haver duplicidade na escolha
                                     
                    matriz2[I] = matriz[numero]; //carrego na matriz2
                    ListBox_Resultado.Items.Add(matriz2[I]);//carrego no listbox para exibição
                }
    
            //ListBox_Resultado.Sorted = true; //somente para confirmar que não há repetição
    
            }
        }
    }


    MARIANO1776

    sábado, 13 de janeiro de 2018 01:49

Todas as Respostas

  • Bom dia, Junior?

    Qual a forma que você encontrou?

    Se possível, poste o código.


    MARIANO1776

    terça-feira, 9 de janeiro de 2018 13:19
  • http://criandobits.com.br/csharp/csharp_dicas_num-aleatorios-sem-repeticao.php

    A persistência e determinação são, por si sós, onipotentes.

    terça-feira, 9 de janeiro de 2018 13:23
  • Pode colocar um exemplo do resultado almejado, pelo que entendi é isto:

    [30, 01, 07, 15, 02, 06, ..., 25, 03]


    MARIANO1776

    terça-feira, 9 de janeiro de 2018 13:32
  • Estou desenvolvendo um exemplo mas, para adiantar, é simplesmente gerar números aleatórios que sejam números predeterminados, ou seja, que só sejam gerados números aleatórios, sem repetição, que abranja 01, 06, 09 e 15.

    A persistência e determinação são, por si sós, onipotentes.

    terça-feira, 9 de janeiro de 2018 13:46
  • Boa tarde, JuniorCS.

    Tudo bem?

    Encontrou o que precisava? Se ainda não, o que ainda precisa?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 12 de janeiro de 2018 18:20
    Moderador
  • Boa noite, Junior

    Segue código testadinho.

    Se atender, marque como útil/resposta.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
                
            }
    
            
    
            private void button1_Click(object sender, EventArgs e)
            {
            ListBox_Resultado.Items.Clear();
    
            txt_limite_inferior.Text = txt_limite_inferior.Text.Trim();
            txt_limite_superior.Text = txt_limite_superior.Text.Trim();
            txt_Qtd_Num_Sequencia.Text = txt_Qtd_Num_Sequencia.Text.Trim();
    
            txt_limite_inferior.Text = "1"; //somente para os testes
            txt_limite_superior.Text = "50"; //somente para os testes
            txt_Qtd_Num_Sequencia.Text = "20"; //somente para os testes
                      
    
            int I, J, numero; //auxiliares
            int int_qtd_sequencia = Convert.ToInt32 (txt_Qtd_Num_Sequencia.Text); //número de elementos da sequencia
            int int_limite_inferior = Convert.ToInt32 (txt_limite_inferior.Text); //limite inferior da sequencia
            int int_limite_superior = Convert.ToInt32 (txt_limite_superior.Text); //limite superior da sequencia
    
            int [] matriz = new int [int_qtd_sequencia];
            int [] matriz2 = new int [int_qtd_sequencia];
            int [] numeros_inclusao_obrigatoria  = new int [] {1, 4, 9, 16, 25, 36}; //números com inclusão obrigatória, aqui tem que ter uma rotina para carregá-los
            Random GeradorDeNumerosAleatorios   = new Random ();
    
               for (I = 0; I < int_qtd_sequencia; I++)
               {
                   matriz[I] = -1; //seto a matriz ou array em -1
               }
    
                     
               for (I = 0; I < int_qtd_sequencia; I++)
                {
            
                    do
                        {
                        numero = GeradorDeNumerosAleatorios.Next(int_limite_inferior , int_limite_superior  + 1); // seleciono um número aleatório
                        }
                     while ( matriz.Contains(numero)); //verifico se não está na matriz, pois pode haver duplicidade na escolha
                                     
                        matriz[I] = numero; //carrego na matriz
                 }
    
              
    
                for (I = 0; I < numeros_inclusao_obrigatoria.Count(); I++)//para cada número obrigatório
                {
    
                    if (!(matriz.Contains(numeros_inclusao_obrigatoria[I] ))) //se o número obrigatório selecionado não estiver na matriz preenchida
                    {
                        for (J = 0; J < int_qtd_sequencia; J++) //verifica em toda asequencia
                        {
    
                            if (!(numeros_inclusao_obrigatoria.Contains(matriz[J]))) //verifica para não substituir um dos números obrigatórios por outro
                            {
                                matriz[J] = numeros_inclusao_obrigatoria[I]; //substitui um dos números da matriz por um dos obrigatórios
                                break;
                            }
                        }
                    }
                }
    
               
                for (I = 0; I < int_qtd_sequencia ; I++) //para evitar vícios na sequencia dos números obrigatórios, fazemos nova seleção aleatória da matriz e carregamos na matriz2
                {
                     do
                     {
                        numero = GeradorDeNumerosAleatorios.Next(0, int_qtd_sequencia ); // seleciono um número aleatório
                     }
                     while (matriz2.Contains(matriz[numero])); //verifico se não está na matriz2, pois pode haver duplicidade na escolha
                                     
                    matriz2[I] = matriz[numero]; //carrego na matriz2
                    ListBox_Resultado.Items.Add(matriz2[I]);//carrego no listbox para exibição
                }
    
            //ListBox_Resultado.Sorted = true; //somente para confirmar que não há repetição
    
            }
        }
    }


    MARIANO1776

    sábado, 13 de janeiro de 2018 01:49
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 15 de janeiro de 2018 19:24
    Moderador