Поиск по этому блогу

понедельник, 26 декабря 2016 г.

Работа с массивами С25 ЕГЭ

Преложено пять задач С25

1. Дан це­ло­чис­лен­ный мас­сив из 20 эле­мен­тов. Эле­мен­ты мас­си­ва могут при­ни­мать целые зна­че­ния от 0 до 10000 вклю­чи­тель­но. Опи­ши­те на есте­ствен­ном языке или на одном из язы­ков про­грам­ми­ро­ва­ния ал­го­ритм, поз­во­ля­ю­щий найти и вы­ве­сти мак­си­маль­ное зна­че­ние среди трёхзнач­ных эле­мен­тов мас­си­ва, не де­ля­щих­ся на 9. Если в ис­ход­ном мас­си­ве нет эле­мен­та, зна­че­ние ко­то­ро­го яв­ля­ет­ся трёхзнач­ным чис­лом и при этом не крат­но 9, то вы­ве­ди­те со­об­ще­ние «Не най­де­но». Ис­ход­ные дан­ные объ­яв­ле­ны так, как по­ка­за­но ниже на при­ме­рах для не­ко­то­рых язы­ков про­грам­ми­ро­ва­ния и есте­ствен­но­го языка. За­пре­ща­ет­ся ис­поль­зо­вать пе­ре­мен­ные, не опи­сан­ные ниже, но раз­ре­ша­ет­ся не ис­поль­зо­вать не­ко­то­рые из опи­сан­ных пе­ре­мен­ных.

Решение: 


  • Для решения используем перебор всех элементов массива (for i := 1 to N do) и фильтруем их с помощью условного оператора. Используем сложное условие: число должно быть трехзначным (a[i]>99)and(a[i]<1000) и  не кратным девяти(a[i]mod 9<>0).
  • Из ни отбираем максимальное if a[i]>max then max:=a[i];

const
N = 20;
var
a: array [1..N] of integer;
i, j, max: integer;
begin
for i := 1 to N do
readln(a[i]);
max:=0;
for i := 1 to N do
if (a[i]>99)and(a[i]<1000)and(a[i]mod 9<>0)then
if a[i]>max then max:=a[i];
if max=0 then write('no') else write(max);
end.
2. Дан це­ло­чис­лен­ный мас­сив из 40 эле­мен­тов. Эле­мен­ты мас­си­ва могут при­ни­мать целые зна­че­ния от 0 до 10 000 вклю­чи­тель­но. Опи­ши­те на есте­ствен­ном языке или на одном из язы­ков про­грам­ми­ро­ва­ния ал­го­ритм, поз­во­ля­ю­щий найти и вы­ве­сти ко­ли­че­ство пар эле­мен­тов мас­си­ва, в ко­то­рых де­ся­тич­ная за­пись хотя бы од­но­го числа окан­чи­ва­ет­ся на 2. В дан­ной за­да­че под парой под­ра­зу­ме­ва­ет­ся два под­ряд иду­щих эле­мен­та мас­си­ва.
На­при­мер, для мас­си­ва из пяти эле­мен­тов: 16 3 142 55 22 – ответ: 3.
Ис­ход­ные дан­ные объ­яв­ле­ны так, как по­ка­за­но ниже на при­ме­рах для не­ко­то­рых язы­ков про­грам­ми­ро­ва­ния и есте­ствен­но­го языка. За­пре­ща­ет­ся ис­поль­зо­вать пе­ре­мен­ные, не опи­сан­ные ниже, но раз­ре­ша­ет­ся не ис­поль­зо­вать не­ко­то­рые из опи­сан­ных пе­ре­мен­ных.


Решение: 
  • Перебираем пары элементов массива a[i-1], a[i]. Поэтому цикл начинаем не 1 , а  с 2-х.
  • Определяем с помощью mod 10 последнюю цифру элемента массива.
  • Т.к. для подсчета пар достаточно чтобы хотя бы у одного элемента пары последняя цифра оканчивалась двойкой применяем логическую связку  or (или) 
const
N = 40;
var
a: array [1..N] of integer;
i, j, k: integer;
begin
randomize;
for i := 1 to N do
begin
a[i]:=random(100);
write(a[i]:3);
end;
k:=0;
for i := 2 to N do
if (a[i-1]mod 10=2) or (a[i]mod 10=2) then k:=k+1;
write(' k= ',k);
end.

3. Опре­де­лить есть ли в мас­си­ве хотя бы одна трой­ка со­сед­них чисел, в ко­то­рой сред­ний эле­мент боль­ше своих "со­се­дей", т. е. пред­ше­ству­ю­ще­го и по­сле­ду­ю­ще­го. В слу­чае по­ло­жи­тель­но­го от­ве­та опре­де­лить но­ме­ра эле­мен­тов пер­вой из таких троек.

Решение: 
  • Перебираем тройки элементов массива a[i-2], a[i-1], a[i]. Поэтому цикл начинаем не i:=1 , а  с 3-х. Используем цикл While потому что необходимо вывести  номер первого такого элемента. Номер запоминаем в переменной k. Изначально k:=0. Цикл будет работать пока закончатся элементы  (i<=n) и искомый элемент не найден (k=0).
  • Искомый элемент определяется условием (a[i-1]>a[i-2])and(a[i-1]>a[i]).
const
N = 10;
var
a: array [1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
readln(a[i]);
k:=0;
i:=3;
while (k=0)and (i<=n) do
begin
if (a[i-1]>a[i-2])and(a[i-1]>a[i]) then k:=i-1;
i:=i+1;
end;
if k=0 then write('no') else write('k=',k);
end.






4. Дан це­ло­чис­лен­ный мас­сив из 23-х эле­мен­тов. Эле­мен­ты мас­си­ва мо­гут при­ни­мать зна­че­ния от 1500 до 2000 — ко­ли­че­ство зна­ков в ста­тье. На сайт при­ни­ма­ют­ся ста­тьи раз­ме­ром не более 1800 зна­ков. Га­ран­ти­ру­ет­ся, что такие зна­че­ния в базе дан­ных есть.
Опи­ши­те на рус­ском языке или на одном из язы­ков про­грам­ми­ро­ва­ния ал­го­ритм, ко­то­рый на­хо­дит и вы­во­дит на экран раз­мер самой боль­шой ста­тьи, ко­то­рую можно раз­ме­стить на сайте.
Ис­ход­ные дан­ные объ­яв­ле­ны так, как по­ка­за­но ниже. За­пре­ща­ет­ся ис­поль­зо­вать не объ­яв­лен­ные пе­ре­мен­ные, но раз­ре­ша­ет­ся не ис­поль­зо­вать часть из них.

Решение: 
  • Перебираем элементы массива for i := 1 to N do
  • Из элементов удовлетворяющих условию (a[i]<1800) отбираем максимальное if a[i]>max then max:=a[i];
const
N = 23;
var
a: array [1..N] of integer;
i, j, max: integer;
begin
randomize;
for i := 1 to N do
begin
a[i]:=1790+random(501);
write(a[i]:5);
end;
max:=0;writeln;
for i := 1 to N do
if (a[i]<1800)then
if a[i]>max then max:=a[i];
if max=0 then write('no') else write(max);
end.






5. Дан ве­ще­ствен­ный мас­сив из 40 эле­мен­тов. Эле­мен­ты мас­си­ва могут при­ни­мать про­из­воль­ные зна­че­ния. Опи­ши­те на рус­ском языке или на одном из язы­ков про­грам­ми­ро­ва­ния ал­го­ритм, ко­то­рый на­хо­дит и вы­во­дит ми­ни­маль­ный по­ло­жи­тель­ный эле­мент мас­си­ва или со­об­ще­ние, что та­ко­го эле­мен­та нет.
Ис­ход­ные дан­ные объ­яв­ле­ны так, как по­ка­за­но ниже. За­пре­ща­ет­ся ис­поль­зо­вать пе­ре­мен­ные, не опи­сан­ные ниже, но раз­ре­ша­ет­ся не ис­поль­зо­вать часть из них.

Решение: 
  • Для заполнения массива используем генератор случайных чисел a[i]:=(1790-random(2501))/100;. В данном примере (1790-random(2501)) - дает числа из отрезка [-710,1790]. При делении этих чисел на 100 получаем вещественные числа, как положительные, так и отрицательные.
  • чтобы найти минимальное положительное число начальным значением  переменной min присваиваем большое число 1,8 на десять в 307 степени (min:=1.8e307;)
  • При обнаружении положительного числа (a[i]>0) сравниваем его с минимумом и если оно меньше, то изменяем минимум. (if a[i]<min then min:=a[i];)
const
N = 40;
var
a: array [1..N] of real;
i, j: integer;
min: real;
begin
for i := 1 to N do
begin
a[i]:=(1790-random(2501))/100;
write(a[i]:5:3,',');
end; writeln;
min:=1.8e307;
for i := 1 to N do
if (a[i]>0)then
if a[i]<min then min:=a[i];
if min=1.8e307 then write('no') else write(min);
end.

Комментариев нет:

Отправить комментарий