Kezdőoldal » Számítástechnika » Programozás » PHP feladatban segítség?

PHP feladatban segítség?

Figyelt kérdés

Valaki aki otthon van PHP-ben tudna segíteni egy feladatban?

Szóval létre kell hozni egy tömböt, amiben 20 db 5-35 között, rand() függvénnyel generált szám van, de nem lehet benne 2 ugyanolyan. Hogy lehetne ezt megoldani?

Köszi előre is!



2019. dec. 2. 19:05
1 2
 1/15 anonim ***** válasza:
3%
A generált számot beteszed egy last (=0) változóba és a következőt komparálod vele.
2019. dec. 2. 19:13
Hasznos számodra ez a válasz?
 2/15 anonim ***** válasza:
0%
Pontosan, ahogy #1 írta. Abszolút elegáns!
2019. dec. 2. 19:20
Hasznos számodra ez a válasz?
 3/15 A kérdező kommentje:

És utána hogy csináljam meg azt, ha nincs köztük ugyanolyan berakja a tömbbe, ha van akkor ne rakja bele?

Ez az első nyelv amit tanulok, szóval eléggé új nekem ez. :/

2019. dec. 2. 19:25
 4/15 anonim ***** válasza:
26%

Bocs. Nem jót írtam, még most iszom a "reggeli" kávémat.

Majd jövök.

2019. dec. 2. 19:43
Hasznos számodra ez a válasz?
 5/15 anonim ***** válasza:
63%

Végig kell menni a tömb elemein (komparálni az utoljára generált számot) és ha nincs egyezés, akkor beilleszteni a tömbbe.

Úgy elegáns, ha a tömbindexig komparálsz csak, mert a többi úgy is üres. Vagy dinamikus tömböt használsz, de ilyen csekély elemszámnál nincs jelentősége.

2019. dec. 2. 19:47
Hasznos számodra ez a válasz?
 6/15 anonim ***** válasza:
7%

Meg lehet ezt oldani egyszerűen, minden szám kisorsolásnál végignézed a tömböt, hogy szerepel-e benne az adott szám (in_array). Ha nem szerepel, akkor berakod a tömb végére, ha szerepel új számot sorsolsz. Ezt csinálod addig amíg a tömböd 20 eleműre nem duzzad. Ezzel a probléma, hogy attól függően, hogy az itnervallum mekkora részét kell kisorsolni, sokszor ismétlődhet a kód, ha sokszor generálja ki ugyanazokat a számokat.


Az általam preferált, elegánsabb megoldás biztosítja, hogy minden szám kisorsolása csak egy rand() hívást fog eredményezni. A lényege, hog yminden szám kisorsolása után csökkentjük a kisorsolhatószámok intervallumát. Pl

0. lépés: A tömböd üres, sorsolsz egy számot 5 és 35 között, kisorsolod a 15-öt. Berakod a 15-öt a tömbödbe.

1. lépés: Most már csak 6 és 35 között sorsolsz ki számot, tehát az 5-öt már nem tudod kisorsolni. Viszont ha már kihúzott számot sorsolsz ki (15), akkor a szám helyett a más kisorsolt szám indexe + 5 lesz az amit eltárolsz (tehát ha ismét 15-öt sorsolsz ki, akkor a 15 indexe (0) + 5-öt tárolsz le, ami pont az 5, amit kihagytunk az intervallumból.

2. lépés: 7 és 35 között sorsolsz, és ugyanúgy ha már létező számot sorsolsz, akkor a annak az indexét eltolod 5-el, és azt rakod be. Ha az a szám is létezne már, akkor annak az indexét eltolva 5-el, és így tovább, amíg még nem eltárolt számra nem jutsz.

N. lépés: Általánosítva az N. lépésben N+5 és 35 közötti számot sorsolsz ki, és ha a kihúzott szám létezik már a tömbben, akkor veszed annka az indexét, hozzáadsz 5-öt, és megpróbálod újra eltárolni, amíg nem sikerül egy még nem eltárolt számra lépned.



Írtam egy kis függvényt, ami ennek az általánosítását valósítja meg (JavaScriptben, hogy kicsit te is dolgozz azért vele):

function drawRandom(num, min, max)

{

    result = [];

    for(let i = 0; i< num; i++)

    {

        let last = Math.floor(Math.random() * (max-min-i)) + min+i;

        while((ind = result.indexOf(last)) !== -1)

        {

            last = ind + min;

        }


        result[result.length] = last;

       

    }


    return result;

}

2019. dec. 2. 20:50
Hasznos számodra ez a válasz?
 7/15 anonim ***** válasza:
57%
#6: Ezzel az a gond, hogy nem megoldja, hanem megkerüli a feladatot.
2019. dec. 2. 22:00
Hasznos számodra ez a válasz?
 8/15 anonim ***** válasza:
64%

function UniqueRandomNumbersWithinRange($min, $max, $quantity) {

$numbers = range($min, $max);

shuffle($numbers);

return array_slice($numbers, 0, $quantity);

}


<?php

print_r( UniqueRandomNumbersWithinRange(0,25,5) );

?>

2019. dec. 2. 22:08
Hasznos számodra ez a válasz?
 9/15 anonim ***** válasza:
64%

20 db 5-35 közötti számra pedig:


<?php


print_r( UniqueRandomNumbersWithinRange(5,35,20) );


?>

2019. dec. 2. 22:09
Hasznos számodra ez a válasz?
 10/15 anonim ***** válasza:
0%
Ebben a feladatban az a nehezítés, hogy PHP-ben adták fel. Gyakorlatilag az utolsó nyelv, ami nem ismeri a halmaz adattípust. Azzal pikkpakk menne.
2019. dec. 2. 22:25
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!