Keresés

Aktív témák

  • Jester01

    veterán

    válasz Beri #94 üzenetére

    Valamelyest a te módszerednél maradva úgy írtam át a progid, hogy az act mindig a következõ emberre mutasson (induláskor az elsõre aki a 0 indexû), ekkor ehhez mindig (M - 1)-et kell hozzáadni. Ezzel a módosítással az 5 7 paraméterekre a 2 5 1 3 4 eredmény adódik ami remélhetõleg jó.
    A számítási ciklus nekem ilyen lett:


    while (done < N)
    {
    act += M - 1;
    if (act >= x)
    {
    act = act % x;
    }
    eh[done++] = szamok[act];
    if (act == x - 1)
    {
    /* ha az utolso volt, akkor nem kell mozgatni a tombben */
    /* es a kovetkezo az elso lesz */
    act = 0;
    } else {
    /* ha nem az utolso, akkor a tovabbi elemeket eggyel visszahuzzuk */
    /* es a soron kovetkezo elem ezaltal ismet az act indexen lesz */
    memmove(szamok + act, szamok + act + 1, (x - act - 1) * sizeof(int));
    }
    x--;
    }


    Az elõzõ soremeléses megjegyzésem kicsit módosítom. Nyilván úgy lesz jó, ha a kiíró ciklus eggyel rövidebb és az utolsó elemet külön írod ki. Így megtakarítasz egy if-et a ciklusban ami úgyis csak az utolsó elemre lenne igaz.

    Ha nekem kellett volna megoldani ezt a feladatot, akkor valószínûleg nem ezt az utat választom, hanem egy tömbben egyszerûen azt tartom nyilván, hogy az ember él-e még. Így kicsit bonyolultabb lesz ugyan a következõ index megkeresése, de cserébe megtakarítunk egy csomó memóriamásolást.

    A végére még egy stilisztikai megjegyzés: nem szerencsés keverni az angol és a magyar elnevezéseket/megjegyzéseket, válaszd ki az egyik nyelvet és következetesen használd azt.

  • Jester01

    veterán

    válasz Beri #94 üzenetére

    Beszédesebb változónevek és néhány komment elkelne.
    Valamit az ''5 7'' esetre várt jó illetve a kapott eredmény.

    Ha jól látom x lenne a még életben lévõ emberek száma, a szamok tömb pedig az emberek eredeti sorszámát tartalmazza ahonnan mindig törlöd azokat akik sorra kerültek.

    Ezt a részt itt nem értem:

    if (act>=x)
    {
    act=act%x;
    for (i=0;i<x;i++)
    for (j=0;j<done;j++)
    if (szamok==eh[j])
    {
    for (k=i;k<N;k++) szamok[k]=szamok[k+1];
    x--;
    }
    act=act%x;
    }

    Az eredmény kiírásánál pedig egyszerûbb lenne \n nélkül kiírni az összes számot majd a végére egy \n magában. De ez csak apróság.

    Szerintem lehetett volna békésebb szöveget keríteni a feladathoz

    [Szerkesztve]

Aktív témák