Задача 1.
В одном государстве налоговая система выглядела так:
- Налог составлял 1% от дохода гражданина, но при этом:
- Если при вычислении 1% получалось целое число, то налог составляет именно это целое число.
- Если при вычислении 1% получается дробное число (не важно, чему равна дробная часть - просто исходя из факта её наличия) - то налог составляет целую часть процента + 1.
Трудности у участников олимпиады вызвал тот момент, что округление по правилам математики в данном случае не удовлетворяют условию задачи.
Решение:
Вводим доход гражданина.
Проверяем наличие дробной части в 1%.
Напрягаемся, и вспоминаем, что 1% можно получить, разделив число на 100.
Напрягаемся 2, вспоминаем, что div позволяет получить целую часть от деления, а mod выводит ОСТАТОК от деления.
program z10_1_2016;
var
a,b:integer;
begin
Writeln('Vvedite dohod gragdanina');
readln(a);
if (a mod 100>0) then b:=(a div 100)+1
else b:=(a div 100);
writeln('Procent naloga sostavljaet ',b);
end.
Задача 2.
Задача № 2 в этом году, не поверите, палиндром. Определить, является ли строка палиндромом.
Эта задача подробно описана с различными вариантами решений в статье "Аргентина манит негра" этого блога, поэтому я не буду объяснять её здесь еще раз, а просто дам текст оптимального решения.
Program pal_2;
Var
s: string;
i,f: byte;
begin
write('String: ');
readln(s);
f := 0;
for i := 1 to length(s) div 2 do
if s[i] <> s[length(s)-i+1] then
begin
writeln('No palindrome');
f := 1;
break
end;
if f = 0 then write('Palindrome');
end.
Задача № 3.
Это тоже задача из прошлогодней олимпиады.
Если ход решения этой задачи не понятен - сходите СЮДА - мы решили аналог этой задачи в Scratch. Получилась такая веселая программка:
Если ход решения этой задачи не понятен - сходите СЮДА - мы решили аналог этой задачи в Scratch. Получилась такая веселая программка:
Видео доступно по ССЫЛКЕ
Из одного порта в другой необходимо перевезти 15 различных грузов. Грузоподъемность судна, на котором будет проходить перевозка, 50 тонн. Грузы пронумерованы, и информация о массах грузов хранится в массиве М(15). Определить, сколько рейсов необходимо сделать судну, если грузы неделимы и могут перевозиться только подряд в порядке их нумерации. (Предполагается, что масса отдельного груза не превышает 50 тонн).
Смысл решения: берем кораблик номер k и начинаем в него закладывать грузы по порядку. Если сумма того, что там уже есть, и масса текущего груза превышают 50, мы отправляем текущий кораблик, добавляем к k единичку и начинаем грузить дальше с того груза, который не влез в предыдущий кораблик.
program z3;
var
m:array[1..15] of integer;
k,i,s:integer;
Begin
for i:=1 to 15 do
begin
writeln ('Введите m','[',i,']');
readln (m[i]);
end;
k:=1; i:=1; s:=0;
##Внимание! Используем цикл repeat - until. Подробности - в словаре сайта.##
repeat
if s+m[i]<=50 then
begin
s:=s+m[i];
i:=i+1;
end
else
begin
k:=k+1;
s:=0;
end;
until i>15;
writeln ('Потребовалось ', k,' рейсов');
end.
Комментариев нет:
Отправить комментарий