C#-ban egy vektort hogy töltsek fel random számokkal úgy, hogy a számok növekvő sorrendben legyenek?
Elmented egy változóba az utolsó random számot, és a következő elemet csak akkor adod hozzá, ha az új szám nagyobb az előzőnél.
VAGY
Feltöltöd random számokkal és utána rendezed a vektort.
Vagy az elsőt (N=0) legenerálod így: t[0] = Random.Next(Int32.MinValue, Int32.MaxValue);
N>0 -ra pedig így:
t[N] = Random.Next(t[N-1], Int32.MaxValue);
Bár szerintem az a megoldás lenne a "legkorrektebb", ha először generálnál x random számot, aztán rendeznéd a vektort.
using System;
using System.Collections.Generic;
namespace RNDVector
{
class Program
{
public static void Main(string[] args)
{
int[] Vector = GetArray(100,1,1000);
Array.Sort(Vector);
for (int i=0;i<Vector.Length-1;i++) Console.Write(Vector[i]+", ");
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
private static int[] GetArray(int n, int lower, int upper)
{
Random rnd = new Random();
List<int> list = new List<int>();
for (int ctr = 1; ctr <= n; ctr++)
list.Add(rnd.Next(lower, upper + 1));
return list.ToArray();
}
}
}
A) Rendezetlen listába gyűjtöd a véletlen számokat, majd növekvő sorrendbe rendezed (Array.Sort)
B) Rendezett listába gyűjtöd a véletlen számokat oly módon, hogy az épp legenerált értéket rögtön a megfelelő helyre szúrod be ( [link]
Csak az a megoldás jó, hogy legenerálod a szükséges szűmú véletlenszámot MAJD rendezed a tömböt.
Ha úgy csinálod, hogy csak a korábbiaknál nagyobbakat hagyod meg, akkor azok nem lesznek igazán véletlenszámok (nem lesznek fügetlenek egymástól), mert a későbbiek függnek a korábbiaktól.
Ha nem hiszed el, szimulálj véletlenszám sorokat mindkét módszerrel és hasonlíts össze az átlagukat: az első (helyes) módszerrel az átlaguk alacsonayabb lesz, mint a másodikkal.
Ránézésre véletlenek lesznek, nem volt szó arról, hogy "tökéletes" véletlen számokat generáljunk, szerintem a növekvő sorrenden volt a hangsúly.
Az átlagukat pedig knrvaegyszerűen lehet korrigálni, kisebb tartományban generáljuk a random számot, és úgy adunk össze.
De pontozzatok le most is. :*
Köszönöm a válaszokat!
Amúgy aki azt a hosszú forráskódot írta: Szerintem fölösleges volt!
Úgy vettem észre hogy bőven elég az Array.Sort(vektor);
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!