BROJKE.PAS PROGRAM Brojke (InPut, OutPut); VAR NN, BestN, i : LONGINT; Num : ARRAY [0..4] OF LONGINT; F : TEXT; PROCEDURE Find (n : INTEGER) VAR i, j, t1, t2 : LONGINT; FOR i := 0 TO n - 2 DO FOR j := i + 1 TO n - 1 DO BEGIN t1 := Num [i]; Num[i] := Num[i] + Num[j]; t2 := Num[j]; Num[j] := Num[n - 1]; IF (ABS (NN - Num[i]) < ABS (NN - BestN)) THEN BestN := Num[i]; IF (n > 2) THEN Find (n - 1); Num[i] := t1; Num[j] := t2; t1 := Num[i]; Num[i] := Num[i] * Num[j]; t2 := Num[j]; Num[j] := Num[n - 1]; IF (ABS (NN - Num[i]) < ABS (NN - BestN)) THEN BestN := Num[i]; IF (n > 2) THEN Find (n - 1); Num[i] := t1; Num[j] := t2 END; FOR i := 0 TO n - 1 DO FOR j := 0 TO n - 1 DO IF (I <> J) THEN BEGIN t1 := Num [i]; Num[i] := Num[i] - Num[j]; t2 := Num[j]; Num[j] := Num[n - 1]; IF (ABS (NN - Num[i]) < ABS (NN - BestN)) THEN BestN := Num[i]; IF (n > 2) THEN Find (n - 1); Num[i] := t1; Num[j] := t2; IF (Num[j] <> 0) THEN IF (Num[i] MOD Num[j] = 0) THEN BEGIN t1 := Num[i]; Num[i] := Num[i] / Num[j]; t2 := Num[j]; Num[j] := Num[n - 1]; IF (ABS (NN - Num[i]) < ABS (NN - BestN)) THEN BestN := Num[i]; IF (n > 2) THEN Find (n - 1); Num[i] := t1; Num[j] := t2 END END; END; BEGIN Assign (F, "brojke.in"); Reset (F); FOR i := 0 TO 4 DO Read (F, Num[i]); Read (F, NN); Close (F); Polje[1] := 1; Polje[2] := 2; Polje[3] := 4; Repeats := 3; Search := 1; t := 4; WHILE (t <= N) DO BEGIN WHILE (Polje[Search] <= Repeats) DO INC (Search); t := t + Search - 1; IF (Repeats < 5000) THEN Polje [Repeats + 1] := t; INC (Repeats) END; IF (N = 1) THEN N := 1 ELSE IF (N = 2) THEN N := 2 ELSE IF (N = 3) THEN N := 2 ELSE N := Repeats - 1; Assign (F, "samoref.out"); Rewrite (F); WriteLn (F, N); Close (F); END. BROJKE.C #include #include int n[5]; int operacije[4]; int k, skoro; FILE *fin, *fout; void ucitaj_podatke (void) { int i; fin = fopen ("BROJKE.IN", "r"); fout = fopen ("BROJKE.OUT", "w"); fscanf (fin, "%d %d %d %d %d\n", &n[0], &n[1], &n[2], &n[3], &n[4]); fscanf (fin, "%d\n", &k); fclose (fin); } void izracunaj (int suma) { int i; if () return; else { if (abs (k - skoro) > abs (k - suma) skoro = suma; for (i = 0; i < 4; i++) { switch (i) { case 0: operacija[next] = '+'; break; case 1; operacija[next] = '-'; break; case 2: for (j = 0; j < next; j++) for (k = j; k < next; k++) { izracunaj (prvi ( } break; } } } } void main (void) { ucitaj_podatke (); skoro = 1000; fprintf (fout, "%d\n", k); //izracunaj (); fclose (fout); }