Материал с сайта Подготовка к олимпиадам по программированию
1. Найдите наибольшее значение отношения трехзначного числа к сумме его цифр.
Задача решается методом перебора всех возможных вариантов. Начальное значение переменной первого цикла равно единице, а не нулю т.к. число по условия задачи трехзначное. Соответственно его минимальное значение равно 100.
var
a,b,c: integer;
res: real;
begin
res := 0;
for a := 1 to 9 do
for b := 0 to 9 do
for c := 0 to 9 do
if (a*100 + b*10 + c) / (a + b + c) > res then
res:= (a*100 + b*10 + c) / (a + b + c);
writeln ('Результат равен ', res);
end.
2. Дана строка, состоящая из символов, каждый из которых является знаком «+» или цифрой, начинающаяся и заканчивающаяся цифрой. Если в строке встречается сочетание «++», то выдать сообщение об ошибке, в противном случае вычислить получившуюся сумму.
Эта задача рассчитана больше на знание языка программирования, чем на сообразительность. Дело в том, что в языке Turbo Pascal нет функции преобразования строки в число. Для решения задачи приходиться использовать функцию "ORD", которая позволяет получить порядковый номер любого символа согласно таблице ASCII-кодов. Например, номер сивола '0' - 48, а номер символа'1' - 49. Как вы понимаете, чтобы получить искомую цифру, необходимо отнять от номера символа 48.
const
str = '2 + 6 + 8 + 9 + 1 + 5';
var
i,res: integer;
begin
for i := 1 to length(str) - 1 do
if (str[i] = '+') and (str[i+1]= '+' ) then
exit;
for i := 1 to length(str) do
if str[i] <> '+' then
res := res + (ord(str[i]) - 48);
writeln(res);
end.
3. Каждый элемент квадратной матрицы размеренности NxN равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц (либо одна единица), со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на единицы, расположенные в соседних клетках. Соседними являются клетки, граничащие по горизонтали или вертикали.
При решении задачи используется стандартная процедура обхода 4-связной области. В компьютерной графике 4-связной называется клетчатая область, которую можно обойти ходом ладьи.
const
n = 7;
var
mas: array [1..n, 1..n] of integer;
i,j,res: integer;
procedure count(i,j: integer);
begin
if mas[i,j] <> 1 then
exit;
mas[i,j] := 0;
count(i + 1, j);
count(i - 1, j);
count(i, j + 1);
count(i, j - 1);
end;
begin
{Инициализируем таймер случайных чисел, иначе некоторые компиляторы будут выдавать одно и тоже поле}
randomize;
res := 0;
{Заполняем матрицу так, чтобы ее наружные клетки были заполнены нулями иначе при выполнении процедуры "count" возможен выход за границы массива}
for i := 2 to n-1 do
for j := 2 to n-1 do
mas[i,j]:=random(2);
{Выводим матрицу на экран}
for i := 1 to n do
for j := 1 to n do
begin
write(mas[i,j],' ');
if j = n then
writeln;
end;
for i := 1 to n do
for j := 1 to n do
begin
if mas[i,j] = 1 then
{Сперва увеличиваем переменную res, а потом уже вызываем процедуру count иначе результат будет равен кол-ву клеток матрицы}
inc(res);
count(i,j);
end;
writeln(res);
end.
Комментариев нет:
Отправить комментарий