codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MIN_N 1 // minimum pályázat #define MAX_N 100 // maximum pályázat #define MIN_M 1 // minimum parcella #define MAX_M 100 // maximun parcella #define MIN_AR 1000 // minimum ár #define MAX_AR 1000000 // maximum ár struct p_ // A pályázat struktúrája { int n,m; // 'n' a pályázatok szána, 'm' parcellák száma int par_e[MAX_N-1]; // első parcella int par_u[MAX_N-1]; // utolsó száma float p_ert[MAX_N-1]; // pályázat értéke char p_flag[MAX_N-1]; // hiba jelző }; void hiba(const char *h_leir, char flag) // hibaüzenet ki // h_leir = hibaüzenet szövege // ha flag = 1 akkor kilép // ha flag = 0 akkor visszatér { if (flag==0) { fprintf(stderr,h_leir); return; } if (flag==1) { fprintf(stderr,"Végzetes hiba :\n%s\nKilépés a programbol ...\n",h_leir); exit (1); } } #define BUFF_SIZE 256 // puffer mérete struct p_ beolvas() { FILE *f; int x=0,c=0,flag=0; char buff[BUFF_SIZE]; struct p_ p; f = fopen("licit.be","r"); if (f==NULL) hiba("Nem lehet megnyitni a 'licit.be' file -t !\n",1); flag=fscanf(f,"%d %d",&p.n,&p.m); if (flag==EOF) { fclose(f); hiba("A 'licit.be' file hibás (kevés adat) !\n",1); } if (flag!=2) { fclose(f); hiba("A 'licit.be' file hibás (első sor) !\nFormátum : x y\nx = pályázatok száma\ny = parcellák száma\n",1); } if (p.n<MIN_N || p.n>MAX_N || p.m<MIN_M || p.m>MAX_M) { fclose(f); sprintf(buff,"A 'licit.be' file hibás (első sor) !\nFormátum : x y\nx = pályázatok száma (%d-%d)\ny = parcellák száma (%d-%d)\n",MIN_N,MAX_N,MIN_M,MAX_M); hiba(buff,1); } do { flag=fscanf(f,"%d %d %f",&p.par_e[x],&p.par_u[x],&p.p_ert[x]); if (flag!=EOF) { p.p_flag[x]=0; if (flag!=3) { fclose(f); sprintf(buff,"A 'licit.be' file hibás (%d. sor) !\nFormátum : x y z\nx = parc.-tól\ny = parc.-ig\n z = ennyiért\n",x+1); hiba(buff,1); } if (p.par_u[x]<p.par_e[x]) { sprintf(buff,"A 'licit.be' file hibás (%d. sor) !\nFormátum : x y z\nx = parc.-tól\ny = parc.-ig\n z = ennyiért\n",x+1); hiba(buff,0); hiba("x <= y\nFeltételezem hogy véletlen elírá, ezért kicserélem a két operandust.\n",0); c=p.par_u[x]; p.par_u[x]=p.par_e[x]; p.par_e[x]=c; } if (p.p_ert[x]<MIN_AR || p.p_ert[x]>MAX_AR) { sprintf(buff,"A 'licit.be' file hibás (%d. sor) !\nFormátum : x y z\nx = parc.-tól\ny = parc.-ig\n z = ennyiért\n",x+1); hiba(buff,0); sprintf(buff,"Az ár értékhatáron kívül esik (%d - %d) !\nÉrvénytelen pályázat.",MIN_AR,MAX_AR); hiba(buff,0); p.p_flag[x]=1; } x++; } }while(flag!=EOF); fclose(f); if (x!=p.n) hiba("A licit.be fileban megadott pályázatok száma nem egyezik az adatsorok számával.\n",1); return (p); } struct ljp // a legjobb pályázat struktúrája { int psz; // pályázatok száma char pl[MAX_N]; // pályázatok listálya float ert; }; void kiir(struct ljp legj,char flag) { FILE *f; int x=0; if (flag==1) f=fopen("licit.ki","a"); else f=fopen("licit.ki","w"); if(f==EOF) hiba("nem lehet mergnyitni a 'licit.ki' file -t !",1); fprintf(f,"%f\n",legj.ert); do { fprintf(f,"%d ",legj.pl[x]+1); x++; }while (x<legj.psz); fprintf(f,"\n"); fclose(f); } void main () { struct p_ p; // a pályázat változója int x=0,y=0,vx,vy; struct ljp legj; struct ljp akt; p = beolvas(); fopen("licit.ki","w"); fcloseall(); legj.psz=1; legj.pl[0]=0; legj.ert=p.p_ert[0]; akt.ert=0; if (p.n==1) { kiir(legj,0); exit; } do { y=x+1; akt.ert=p.p_ert[x]; akt.psz=1; akt.pl[akt.psz-1]=y-1; do { if (p.par_e[x]<=p.par_e[y]) { vx=x; vy=y; } else { vx=y; vy=x; } if (p.par_e[vx]==p.par_e[vy] || p.par_u[vx]>=p.par_e[vy]) { y++; } else { akt.pl[akt.psz]=y; akt.ert=akt.ert+p.p_ert[y]; akt.psz++; y++; } }while (y<p.n); if (akt.ert>=legj.ert) { if (akt.ert==legj.ert) kiir(legj,1); // ha több egyforma értékü variáció is van legj.ert=akt.ert; legj.psz=akt.psz; memcpy(legj.pl,akt.pl,legj.psz*sizeof(char)); } x++; }while(x<p.n-1); kiir(legj,0); return; }
Private
[
?
]
Run code
Submit