Keresés

Aktív témák

  • Beri

    addikt

    Hello!
    Segítséget szeretnék kérni. Épp egy feladattal ügyködök, de valami miatt néha hibás eredményt dob a progi...

    Tehát a feladat:
    Kivégzéssorrend megállapítása
    N ember helyezkedik el egy kör mentén. Az elsőtől elindulva minden M-ediket lelövik. A számlálásban csak az élők vesznek részt, a számolást a kivégzett utáni embernél folytatjuk. Készíts olyan programot,
    ami adott N és M esetén kiírja a kivégzések sorrendjét.
    Bemenet
    A bemenet két egész szám, N és M egy szóközzel elválasztva (1 < N < 255; 1 < M < 32767).
    Kimenet
    A kimenet a kivégzettek sorszáma legyen (1-től indulva), egy-egy szóközzel elválasztva. Az utolsó
    kivégzett után egy újsor karakternek kell következnie.

    Pl:
    Bemenet: 10 2
    Kimenet: 2 4 6 8 10 3 7 1 9 5

    Erre ezt sikerült összehozni:

    #include <stdio.h>
    #include <math.h>

    int main()
    {
    FILE *bef,*kif;
    int szamok[255];
    int eh[255];
    int i,j,k,x,act,M,done,N;
    bef = fopen (''be.txt'',''r'');
    kif = fopen (''ki.txt'',''w'');
    fscanf(bef,''%d %d\n'', &N, &M);
    done=0;
    act=-1;
    x=N;
    for (i=0;i<=N;i++) szamok=i+1;
    while (done<N)
    {
    act += M;
    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;
    }
    eh[done++]=szamok[act];
    }
    for (i=0;i<done;i++)
    if (i<(done-1))
    fprintf(kif,''%d '', eh);
    else
    fprintf(kif,''%d\n'', eh
    );
    fclose(bef);
    fclose(kif);
    return 0;
    }

    A progi pl. 5 7 bemenet esetén ad rossz kimenetet. Előre is köszönöm ha valaki segít rajtam...

Aktív témák