Jak wylosować liczby bez powtórzeń?

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace soku111
{
    class Program
    {

        static void Main(string[] args)
        {
            int[] data = new int[3];

            Random losuj = new Random();
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = losuj.Next(0, 3);//losujemy cyfry z przedziału 0-3
            }
            
            //wylosowane Liczby
            for (int i = 0; i < data.Length; i++)
            {
                Console.WriteLine(data[i].ToString());
            }
            Console.ReadLine();
        }
    }
}
 

Niestety w ten sposób cyfry się powtarzają.

0

Tworzysz tablicę losowanych liczb. Wrzucasz wylosowaną liczbę do tablicy, ale tylko jeśli stwierdzisz, że jej tam jeszcze nie ma(binary search). To tyle na ten temat.

0

Chyba robię coś źle.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace soku111
{
    class Program
    {

        static void Main(string[] args)
        {
            
            int[] wylowaneLiczby = new int[4];

            Random losuj = new Random();
            for (int i = 0; i < 4; i++)
            {
               int x = losuj.Next(0, 3);//losujemy cyfry z przedziału 0-3
                if(x!=wylowaneLiczby[i])
                {
                    wylowaneLiczby[i] = x;
                }

            }
            
            //wylosowane Liczby
            Console.WriteLine(wylowaneLiczby[0]);
            Console.WriteLine(wylowaneLiczby[1]);
            Console.WriteLine(wylowaneLiczby[2]);
            Console.WriteLine(wylowaneLiczby[3]);
          
            Console.ReadLine();
        }
    }
}
 
0
namespace soku111
{
    class Program
    {
         static void Main(string[] args)
        {
            int[] Liczby = new int[4];
            for (int i = 0; i < 4; ++i) Liczby[i]=i;
            for (int i = 3; i > 0; --i)
              {
               int p=losuj.Next(0,i);
               if(i!=p)
                 {
                  int t=Liczby[i]; Liczby[i]=Liczby[p]; Liczby[p]=t;
                 }
              }
            Console.WriteLine(Liczby[0]);
            Console.WriteLine(Liczby[1]);
            Console.WriteLine(Liczby[2]);
            Console.WriteLine(Liczby[3]);
 
            Console.ReadLine();
        }
    }
}
0

Dzięki za kod, tylko przydało by się teraz trochę wyjaśnienia. Teraz chce zrobić inne losowanie. Chce wylosować trzy liczby z przedziału 0, listaImion.Count. Czy jest to możliwe?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace soku111
{
    class Program
    {
        
        static void Main(string[] args)
        {
            List<string> listaImion = new List<string>();
            listaImion.Add("Marcin");
            listaImion.Add("Dawid");
            listaImion.Add("Roman");
            listaImion.Add("Michał");
            listaImion.Add("Adam");
            listaImion.Add("Danie");
            listaImion.Add("Gosia");
            listaImion.Add("Sylwia");
            listaImion.Add("Paweł");
            listaImion.Add("Piotr");
            listaImion.Add("Monika");
            listaImion.Add("Patrycja");
            listaImion.Add("Julita");
            Random losuj = new Random();
            int[] Liczby = new int[3];
            for (int i = 0; i < 3; ++i) 
                Liczby[i] = i;
            
            for (int i = 2; i > 0; --i)
            {
                int p = losuj.Next(0, i);
                if (i != p)
                {
                    int t = Liczby[i]; Liczby[i] = Liczby[p]; Liczby[p] = t;
                }
            }
            Console.WriteLine(Liczby[0]);
            Console.WriteLine(Liczby[1]);
            Console.WriteLine(Liczby[2]);

            Console.ReadLine();
        }
    }
}
 
0

W tablice liczby wpisz numery wszystkich imion.
Pętla losująca wystarczy że zrobi trzy kroki. Czyli:

for(int i=ile-1;i>ile-4;--i)

1 użytkowników online, w tym zalogowanych: 0, gości: 1