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

  • ceginner

    csendes tag

    Sziasztok Sorstársak!

    Elakadtam a 2. kötprogival és egy kis segítség kellene. Konkrétan a LÁDAPAKOLÁS lenne a téma. Konkrétabban: Egy gyárban egy nap csak azonos súlyú termékeket gyártanak és ezeket ládába pakolják, egy ládában max. 100 kg lehet. Egy nap max. 1000 db-ot készítenek egy-egy S súlyú termékből... Azt hogy melyik ládába pakoljunk a legkisebb négyzetek módszerével kellene megkeresni, de sehogy sem sön ki az adott kimenet. :W Mit ronthattam el? :F
    Bemenetben az első szám a napok száma, a második két szám pedig db és súly.
    Már nem ez az első verzió, de már tisztára belezavarodtam. Nem tudom hogyan kellene megírni jól az algoritmust, hogy 100 db fölötti adatokra is jól működjön.

    Pl.: Bemenet:
    1
    347 6

    Kimenet:
    0000010000010000010000010
    0000100000100000000000100
    0001000001000001000002000
    0020000030000040000060000

    Az első sor első eleme, az egy kilós ládák száma - és így tovább egyészen százig...

    Az általam írt kód:

    #include <stdio.h>

    #define M 1000
    #define N 100

    int Sulyok[M+1]={0};
    int Darabok[N+1]={0};


    int darab(int suly)
    {
    int j,s;
    int r=1;

    s = suly;
    for(j=0;j<N;j++)
    if (Sulyok[j] == s) r+= 1; //else r=N-1;

    return r;
    }

    void pakol(int db,int s)
    {
    int K=0,a=0;
    int i=0,j=0,k=1,l=0;
    int opt=0;
    int szumma=1000;
    int NAGYSZAM = 10000;
    int ossz;
    int suly;
    ossz = db*s;

    suly = s;

    Sulyok[0] = s; //az első elemet betesszük

    while(i <db){
    if ((s == 1) && (suly%100 != 0)) {Darabok[99] = db/10; Darabok[0] = 0;/*Darabok[100-Sulyok[k-1]]-=1;*/}

    if (Sulyok[k-1] <= 100)
    {
    if (suly != 1) Sulyok[k] += suly;

    // k+=1;
    szumma = darab(Sulyok[k-1]+s)*darab(Sulyok[k-1]+s); //gyakorisag az uj suly berakasa utan


    if (szumma <= NAGYSZAM)
    {opt += 1;
    NAGYSZAM = szumma;
    k=i;
    if(opt >= 1)
    for(l=0;l<=k;l++)
    {
    if(Sulyok[l] > K) {K=Sulyok[l]; k=l;}
    }

    } else k+=1; //ha ezek a feltetelek nem teljesulnek uj lada kell

    / if (Sulyok[k] == (100-Sulyok[k])) {Darabok[100] += 1;}
    Darabok[Sulyok[k]-1] += 1;

    }
    i += 1;
    }

    }

    void kiir2(){
    int i=0,j,k,l,m;
    FILE* ki;

    ki=fopen("ki.txt","w");

    while(i<4){
    for (j=0;j<N/4;j++){
    if (i>0) k = (i*25)+j;
    fprintf(ki,"%d ", Darabok[((i*25)+j)]); }
    i+=1; fputc('\n',ki);}

    fclose(ki);

    }



    int main()
    {
    int i;
    int nap,suly,db;

    FILE* in;
    in=fopen("be.txt","r");

    fscanf(in,"%d",&nap);
    if (nap >=1 && nap<=10)
    for (i=0;i<nap;i++){ fscanf(in,"%d %d",&db,&suly);
    if (db >= 1 && db <= 1000)
    if (suly >=1 && suly <=100) {
    //feldolgozhatjuk az adatokat
    pakol(db,suly);
    }
    }

    kiir2();
    fclose(in);

    return 0;
    }

    Minden segítséget és hozzászólást előre is köszönök!

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