Új hozzászólás Aktív témák

  • vanek

    tag

    válasz WonderCSabo #3008 üzenetére

    közben letelt a határidő..

    de van más problémám is..

    szóval a feladatom a lineáris diofantoszi egyenlet..

    próbálkoztam a megírásával..de nem sokáig jutottam..a legnagyobb közös többszörös még ment..de utána már problémám volt...be kell vallani, hogy nem könnyű program..

    szerencsémre, vagy nem..de véletlen rátaláltam a kész programra..igaz, nem volt nehéz, mivel csak be kellett írnom..nah de a lényeg, hogy ,tanulva a hibámból megnéztem a példában szereplő példákat és mindegyik a helyes eredményt adja vissza..

    #include <stdio.h>
    #include <stdlib.h>

    #define HAMIS 0
    #define IGAZ 1


    int lnko(int x, int y) {
    int maradek;
    int temp;

    if (y > x) {
    temp = y;
    y = x;
    x = temp;
    }

    maradek = y;

    while (y != 0) {
    if ((x % y) == 0) {
    break;
    }
    maradek = x % y;
    x = y;
    y = maradek;
    }

    return maradek;
    }


    void euklidesziAlg(int av, int bv, int* x0, int* y0) {
    int i;
    int szorzo[100];
    int darab = 0;
    int maradek;
    int temp;
    int avSeged;
    int bvSeged;
    int x0Seged;
    int y0Seged;
    int voltCsere = HAMIS;

    avSeged = av;
    bvSeged = bv;
    if (bv > av) {
    temp = bvSeged;
    bvSeged = avSeged;
    avSeged = temp;
    voltCsere = IGAZ;
    }

    if (bvSeged != 1) {
    do {
    szorzo[darab] = avSeged / bvSeged;
    maradek = avSeged % bvSeged;
    avSeged = bvSeged;
    bvSeged = maradek;
    darab++;
    } while (maradek != 1);

    maradek = 0;
    x0Seged = 1;
    for (i = darab-1; i >= 0; i--) {
    y0Seged = maradek + x0Seged * szorzo[i];
    if (i > 0) {
    maradek = x0Seged;
    x0Seged = y0Seged;
    }
    }
    } else {
    x0Seged = 1;
    y0Seged = 1 - avSeged;
    }

    if (voltCsere) {
    temp = y0Seged;
    y0Seged = x0Seged;
    x0Seged = temp;
    }

    if (-av*x0Seged + bv*y0Seged == 1) {
    x0Seged *= -1;
    } else if (av*x0Seged - bv*y0Seged == 1) {
    y0Seged *= -1;
    } else if (-av*x0Seged - bv*y0Seged == 1) {
    x0Seged *= -1;
    y0Seged *= -1;
    }

    *x0 = x0Seged;
    *y0 = -y0Seged;
    }

    int main() {

    FILE *f, *fk;
    int a;
    int b;
    int c;
    int d;
    int av;
    int bv;
    int cv;
    int x0;
    int y0;
    int x;
    int y;
    int teszt;

    f=fopen("be.txt", "r");
    fk=fopen("ki.txt", "w");
    if(f==NULL)
    {
    exit (-1);
    }
    teszt=fscanf(f, "%d %d %d", &a, &b, &c);

    if(teszt!=3)
    {
    fprintf(fk, "0\n");
    }
    else
    {

    d = lnko(a, b);

    av = a / d;
    bv = b / d;
    cv = c / d;

    if (c % d == 0) {
    euklidesziAlg(av, bv, &x0, &y0);
    x = x0 * cv;
    y = y0 * cv;
    while (x < 0 || y < 0) {
    x += bv;
    y += av;
    }
    while (x-bv >= 0 && y-av >= 0) {
    x -= bv;
    y -= av;
    }
    fprintf(fk,"%d %d\n\n", x, y);
    }
    else {
    fprintf(fk, "0\n");
    }

    fclose(f);
    fclose(fk);
    return 0;

    getchar();
    }
    }

    de ha feltöltöm a bíróra..nincs helyes eredmény..

    lehet, hogy a nagy zűrzavarban félrenéztem valamit..

    tudom, hogy így csak nekem lesz nehezebb a vizsga..de hátha tanulok belőle..

    köszi előre is!

Új hozzászólás Aktív témák