riešenie

  1. Program zisťuje počet čísel z intervalu <A,A+100>, ktoré sú deliteľné 7 – pre každé takéto číslo sa odtrhne posledná cifra a opäť sa testuje na deliteľnosť 7 – ak je to pravda, tiež sa to započíta do celkového počtu. Počet deliteľných čísel je buď 14 alebo 15. Medzi nimi je jedno alebo dve čísla končiace na 0 aj 7.
    1. Pre A=0 je 14 deliteľných pričom 70 a 77 sú deliteľné aj bez poslednej cifry => P=16.
    2. Pre A=700 je 15 deliteľných pričom 700, 707, 770 a 777 sú deliteľné aj bez posledných dvoch cifier => P=15+4*2=23.
    3. P=17 znamená, že v intervale <A,A+100> musí byť 15 deliteľných a medzi nimi by mali byť čísla končiace na 70 a 77, lebo tie by do počtu pridali viac ako dvoch deliteľných – končiace na 0 a 7 musia byť po jednom --- tomuto vyhovuje len A=9400 lebo 7 sú deliteľné 9401 aj 9499.
  1. oprava programu je napr. nasledovná:
  1. je to regulárna gramatika, v ktorej posledná cifra je (počet A - počet B) mod 3 + 1
    1. počet A=8, počet B=10 ... číslo končí 2
      počet A=10, počet B=10 ... číslo končí 1
    2. slovo končí 2, ak (počet A - počet B) mod 3=1, t.j.
      počet A=5 a počet B=1 ... počet takých reťazcov je (6 nad 1) = 6
      počet A=2 a počet B=4 ... počet takých reťazcov je (6 nad 2) = 15
      spolu je takých slov 21
  1.  napr. riešenie
    1. var
        baliky:array[1..100] of integer;
        i,N,min,x:integer;
      begin
        // prečítanie N a poľa baliky
        for i:=1 to N div 2 do begin
          min:=0; x:=0;
          for j:=1 to N do
            if (baliky[j]<>0)and((min=0)or(baliky[j]<min)) then begin
              x:=j;
              min:=baliky[j];
            end;
          baliky[x]:=0;
        end;
        // výpis poľa baliky – nemusí byť
        for i:=1 to N do write(baliky[i],' ');
        writeln;
      end;