Задача 20 Урок 15
Primary tabs
Дан массив длиной N (не более 100 элементов), состоящий из случайно выбранных чисел из диапазона от 00 до k, где 0≤k
Найдите в этом массиве длину самого короткого фрагмента, который содержит все числа от от 0 до k.
type myArr = array [1..100] of integer; //myArr = array [1..10] of integer; var min, max: integer; a: myArr; i,i2, j: integer; // счётчики p,m,k:integer; c:boolean; // для цикла поиска если сегмент будет найден v:integer; // заводим переменную v если сегмент не будет найден function searchoneM(a: myArr): integer; var b:boolean; begin b:=false; for i := low(a) to high(a) do if b=false then begin if a[i]=0 then begin m:=i; b:=true; end; end else break; end; function searchoneP(m,k:integer; a: myArr): integer; var b:boolean; begin b:=false; for i := m to high(a) do if b=false then begin if a[i]=k then begin p:=i; b:=true; end; end else break; end; function searchNum(m,p,k: integer; a: myArr): boolean; begin for i := 0 to k do begin result := false; for j := m to p do if i = a[j] then begin result := true; break; end; if result = false then break; end; end; function searchNextM(a: myArr; p: integer): integer; var b:boolean; begin b:=false; for i := p to high(a) do if b=false then begin if a[i]=0 then begin m:=i; b:=true; end; end else break; end; function searcNextP(m,k:integer; a: myArr): integer; var b:boolean; begin b:=false; for i := m to high(a) do if b=false then begin if a[i]=k then begin p:=i; b:=true; end; end else break; end; begin c:=false; randomize(); //a[1]:=3; //a[2]:=3; //a[3]:=3; //a[4]:=3; //a[5]:=3; //a[6]:=0; //a[7]:=1; //a[8]:=2; //a[9]:=3; //a[10]:=4; min := 0; max := 10; for i := low(a) to high(a) do a[i] := min + random(max - min + 1); writeln('enter k'); readln(k); m:=searchoneM(a); // ищем первое m p:=searchoneP(m,k,a); // ищем первое p repeat if (searchNum(m,p,k, a)) then // передаём и возвращаем функцию begin c:=true; writeln('Everything is on the segment',' ','from',' ', m,' ', 'to',' ',p); for i := m to p do write(a[i], ' '); writeln(); writeln('original'); for i := low(a) to high(a) do write(a[i], ' '); end else m:=searchNextM(a,p); // если в первом случае не найдено и т.д. p:=searcNextP(m,k,a); // если в первом случае не найдено и т.д. v+=1; if v=100 then begin writeln(); writeln('the segment was not found'); writeln(); writeln('original'); for i := low(a) to high(a) do write(a[i], ' '); end; until (c=true) or (v=100); writeln(); write('End'); readln(); end.
Вывод консоли:
enter k 3 Everything is on the segment from 49 to 70 0 2 1 4 7 5 1 9 6 1 1 10 8 2 1 2 8 4 5 7 0 3 original 8 4 2 10 5 2 3 7 4 2 4 3 0 3 5 4 8 7 9 6 8 10 5 3 0 4 3 4 6 4 8 3 6 6 4 6 3 9 4 7 1 6 1 7 3 10 4 2 0 2 1 4 7 5 1 9 6 1 1 10 8 2 1 2 8 4 5 7 0 3 10 5 10 9 0 1 4 9 3 8 3 2 0 9 6 4 10 10 10 0 4 7 8 0 3 6 1 9 10 9 End
- Log in to post comments
- 54 reads