/* welfare_crook.c -- Matthias Jauernig, 10.01.04 */ /* Programm simuliert das Welfare-Crook-Problem, nach dem der kleinste */ /* gemeinsame Eintrag dreier Arrays gefunden werden soll */ #include /* -- Struktur zum Speichern des gemeinsamen Eintrags sowie der Indizes deklarieren --- */ typedef struct{ int kge; // kge=(k)leinster (g)emeinsamer (E)intrag int i1; // a[i1]=kge, b[i2]=kge, c[i3]=kge; int i2; int i3; } rg_struct; /* -- welfare_crook() -- ermittelt den kleinsten gemeinsamen Eintrag der 3 Arrays ----- */ rg_struct welfare_crook(int *a, int *b, int *c, int l1, int l2, int l3){ int i, j, k, gef=0; rg_struct erg={-1,-1,-1,-1}; //solange kein gemeinsamer Eintrag gefunden (gef=0) und eines alle drei //Arrays ihre Grenze nicht überschritten haben... for(i=0, j=0, k=0; !gef && i abspeichern erg.kge=a[i]; erg.i1=i; erg.i2=j; erg.i3=k; gef=1;//Abbruchbedingung erfüllen } } return erg; } /* ---- main() ------------------------------------------------------------------------ */ int main(void){ int a[]={1,3,4,7,8,11,13,15,16,17,20};//Beispielarrays initialisieren int b[]={2,5,13,15,16,18,20}; int c[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; int l1=sizeof(a)/sizeof(a[0]);//Anzahl der Elemente der Arrays a,b,c bestimmen int l2=sizeof(b)/sizeof(b[0]); int l3=sizeof(c)/sizeof(c[0]); int i; rg_struct erg=welfare_crook(a,b,c,l1,l2,l3); printf( "\nWelfare-Crook-Problem\n" "---------------------\n\n"); printf("Gegeben seien folgende drei Arrays:\n"); printf(" a[]: "); for(i=0; i