Урок 15 Задача 17
Primary tabs
Дан массив длиной N (где 10≤N<100). Найти в этом массиве отрезок длиной F, такой что на нем встречаются все числа от 0 до k, где 0≤k<F.
В качестве ответа (если отрезок найден) получите его начальный и конечных индекс - m
и p ( 1≤m<p≤N, считая что массив индексируется с единицы)
Указание: Проверку массива на соответствие условиям задачи вынести в подпрограмму (процедуру, которая вычислит нужные индексы, если есть)
Подсказка: можно использовать функцию проверки отрезка в массиве из предыдущей задачи.
Решение:
program u15z17;
type newArr = array [1..100] of integer;
var a:newArr;
i,j,k,m,p,count:integer;
function randomArr(arr:newArr): newArr;
begin
for i:=low(arr) to high(arr) do
arr[i]:=random(31);
result:=arr;
end;
begin
randomize;
a:=randomArr(a);
writeln();
m:=100;
p:=0;
for i:=low(a) to high(a) do
write(a[i],'|');
writeln();
write('vvedite chislo k: ');
readln(k);
count:=-1;
for j:=0 to k do
begin
for i:=low(a) to high(a) do
begin
if j=a[i] then
begin
count:=count+1;
if i>p then
p:=i;
if i<m then
m:=i;
break;
end;
end;
end;
if count=k then
begin
writeln('TRUE');
writeln('m:',m,' p:',p);
end
else
writeln('FALSE');
readln();
end.
Консоль:
10|26|4|4|15|20|5|24|0|9|12|20|25|8|28|29|6|4|19|4|22|22|4|16|28|1|17|11|13|23|9|16|8|22|15|10|26|7|7|19|3|4|21|10|11|8|18|14|24|5|12|28|28|24|23|26|2|28|3|0|22|22|24|4|10|19|2|2|7|15|13|4|10|20|16|8|10|16|28|29|21|1|26|0|16|28|11|25|4|18|9|3|27|17|21|30|1|19|26|30| vvedite chislo k: 10 TRUE m:1 p:57
- Log in to post comments
- 2473 reads
vedro-compota
Tue, 06/07/2022 - 21:24
Permalink
1) Указание: Проверку массива
1) Указание: Проверку массива на соответствие условиям задачи вынести в подпрограмму (функцию)
2) можно использовать (вызывать) подпрограмму из предыдущей задачи
_____________
матфак вгу и остальная классика =)
avast36
Thu, 06/09/2022 - 12:36
Permalink
Исправил
Решение:
program u15z17; type newArr = array [1..100] of integer; var a:newArr; i,j,k,m,p:integer; t:boolean; function randomArr(arr:newArr): newArr; begin for i:=low(arr) to high(arr) do arr[i]:=random(31); result:=arr; end; procedure writeArr(arr:newArr); begin for i:=low(arr) to high(arr) do write(arr[i],'|'); writeln(); end; procedure otrezok(arr:newArr; k:integer); begin m:=101; p:=0; for j:=0 to k do begin t:=FALSE; for i:=low(arr) to high(arr) do begin if j=arr[i] then begin write(j,' '); t:=TRUE; if i>p then p:=i; if i<m then m:=i; break; end; end; if t=FALSE then break; end; if t then begin writeln(t); writeln('m=',m,' p=',p); end else writeln(t); end; begin randomize; a:=randomArr(a); writeArr(a); write('vvedite chislo k: '); readln(k); otrezok(a,k); readln(); end.Консоль:
vedro-compota
Wed, 06/15/2022 - 19:22
Permalink
замечания
_____________
матфак вгу и остальная классика =)