odwrócenie tablicy

0

Witam, mam problem chciałbym w połowie działania tablicy ją odwrócić coś na wzór 5 4 3 3 4 5

for (int i = 0; i < tablica.Length/2; i++)                                        
            {
                Array.Sort(tablica);
                Array.Reverse(tablica);
                Console.Write(tablica[i] + ", ");
            }
  for (int i = 0; i < tablica.Length/2; i++)
            {
                Array.Sort(tablica);
                Array.Reverse(tablica);
                Console.Write(tablica[i] + ", ");
            }

i tworzy mi się taki wyraz dla 10 wylosowanych elementów tablicy
Screenshot_1.jpg

generator liczb mój :

Random rand = new Random();
            Console.WriteLine("Podaj wielkość tablicy:");
            int wielkosc = int.Parse(Console.ReadLine());
            int[] tablica = new int[wielkosc];
            Console.WriteLine("\nTablica przed sortowaniem(losowa)");
           for (int i = 0; i < tablica.Length; i++)
           {
               tablica[i] = rand.Next(101);
               Console.Write(tablica[i] + ", ");
           }

jak odwrócić te liczby od połowy ? jakiś pomysł

1

Co ma być na wyjściu dla tej tablicy ze screena?

0

po prostu chce wypisać liczby w takim kształcie ( litera V ) najpierw maleją potem rosną takie mam zadanie, potem je sortuje ale to już inna sprawa

1

To Napisz, co ma wyjść z tej tablicy, bo dalej nie kumam.

0

Okay najpierw podaje rozmiar tablicy np 30, i tablica jest losowo zapełniania liczbami funkcją rand, i te liczby mają być tak dobierane że zaczynam od losowej liczby np 100 i idzie w dół aż do połowy tablicy
założyliśmy że ma rozmiar (30) czyli po 15 wylosowanych liczbach zaczyna dobierać w górę kolejne 15 rosnąco. gdy mam już 30 liczb mam je po prostu wypisać za pomocą Console.Write(tablica[i]); chcę ja tylko wypisać nic więcej, problem w tym że do połowy tablicy liczby mi maleją a potem już nie chcą rosnąć w drugiej połowie

0

Musicie mieć zadanie z tego bo to już trzecia osoba z tym samym problemem. Nie rozumiem po co sortować tablicę w pętli?

Botek napisał(a):

Ja bym osobiście nie ograniczał funkcji random w tym zadaniu. Nazwa generator kojarzy się z generowaniem tablicy więc ja bym ją napisał tak

        static int[] Generator(int size)
        {
            int[] tablica = new int[size];
            Random Generator = new Random();
            for (int i = 0; i < tablica.Length; ++i)
            {
                tablica[i] = Generator.Next();
            }
            return tablica;
        }

I co do V-kształtnej wprowadziłem cię w błąd powinieneś szukać minimum.

Ad. 5

         static int[] GenerateVArray(int size)
        {
            int[] tab = Generator(size);
            Array.Sort(tab, 0, tab.Length / 2 + 1);
            Array.Reverse(tab, 0, tab.Length / 2 + 1);
            Array.Sort(tab, tab.Length/2, tab.Length / 2+ tab.Length % 2);
            return tab;
        }

Ale musisz sprawdzić czy się wszystko zgadza bo pisałem na szybko.

0

Bez tytułu.png

Nic z tego wychodzi taki śmieszny ciąg

0

A jaki ma wyjść? Bo dla mnie jest on V-kształtny. Jedyny problem jest taki ,że wrzucasz mu zamiast ciągu losowego ciąg posortowany odwrotnie. Przynajmniej tak wygląda wynik.

0

a jestem to podpytam sądzisz że generowanie liczb w postaci stałej to np 5 5 5 5 5 5 ? czy może liczby które mają stały wzrost w sensie 1 2 3 4 5 6 7

1

Liczba stała to stała. To też już komuś rozwiązywałem

Botek napisał(a):

Ad.4

 Random random = new Random();
 int randomvalue = random.Next();
 int[] tab = Enumerable.Repeat(randomvalue, 200000).ToArray();
0

Tylko po co najpierw wylosować źle, potem poprawiać szukając jakichś minimów, sortując i odwracając, zamiast zrobić od razu dobrze?

Wystarczy pół pętli, i nie trzeba w ogóle używać klasy Array:

private static int[] GenerateV(int size, int rangeSize = 10)
{
    var rnd = new Random();

    var result = new int[size];
    for (int i = 0; i <= size / 2; i++)
    {
        int minRange = (size - i * 2 - 1) * rangeSize;
        int maxRange = (size - i * 2) * rangeSize;

        result[i] = rnd.Next(minRange, maxRange);
        result[size - i - 1] = rnd.Next(minRange, maxRange);
    }


    return result;
}

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