riešenie

  1. Program v danom intervale čísel <A,B> počíta počet výskytov cifry 7.
    1. Pre <180,250> len čísla {187, 197, 207, 217, 227, 237, 247} obsahujú po jednej cifre 7 => P=7.
    2. Pre <1,100> sú to čísla {7, 17, 27, 37, 47, 57, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 87, 97} pričom číslo 77 obsahuje dve cifry 7, t.j. minimálne B=97.
    3. už vieme (b), že v intervale <1,100> sa nachádza 20 cifier 7 => ak si nevšímame prvé dve cifry všetkých čísel z intervalu <1000,10000>, tak P=90*20=1800;
      pozrime sa na prvé dve cifry: ciframi 10 začína 100 čísel, ciframi 11 ďalších 100, ... ciframi 99 tiež 100 čísel – medzi týmito sa cifra 7 vyskytuje 19-krát (berieme len štvorciferné, teda <700,799> nezapočítavame), t.j. P=90*20+19*100=3700.
  1. oprava programu je napr. nasledovná:
  1. je to regulárna gramatika, v ktorej posledná cifra je počet A mod 2 + 2*(počet B mod 2) + 1
    1. počet A=7, počet B=7 ... číslo končí 4
      počet A=25, počet B=5 ... číslo končí 4
    2. slovo končí 2, ak počet A je nepárne a počet B je párne, t.j.
      počet A=1 a počet B=4 ... počet takých reťazcov je (5 nad 1) = 5
      počet A=3 a počet B=2 ... počet takých reťazcov je (5 nad 3) = 10
      počet A=5 a počet B=0 ... počet takých reťazcov je (5 nad 5) = 1
      spolu je takých slov 16.
  1.  napr. riešenie
    1. var
        skoky:array[1..N] of integer;
        vzd,i,x,naj:integer;
      begin
        // prečítanie do poľa s
        vzd:=0;
        for i:=1 to N do inc(vzd,skoky[i]);
        writeln('skončí vo vzdialenosti ',abs(vzd));
       
        naj:=vzd; x:=0;
        for i:=1 to N do
          if abs(vzd-2*skoky[i]) < naj then begin
            x:=i; naj:=abs(vzd-2*skoky[i]);
          end;
       
        if x=0 then writeln('nie je také')
        else writeln('treba otočiť ',skoky[x],' aby bola vzdialenosť ',naj);
      end;