Задача 2: Вся соль в формуле. Формула считает количество чисел, делящихся на 2; делящихся на 3 и не делящихся на 2; делящихся на 5 и не делящихся на 2 и на 3.
Code
Program pr2;
var N:longint;
begin
readln (N);
writeln (N-((N div 2) + (((N div 3+1)) div 2) + ((N div 5) - ((N div 5) div 2) - ((N div 5) div 3) + ((N div 5) div 6))) );
end.
Может лишнее количество скобок, но уж так привык (мне так нагляднее)))
Задача 4:
Quote
Program pr4;
var N,m:longint;
i,k:integer;
begin
readln(N,k,m);
i:=0;
while (N<m) do
begin
N:=N+((N*k) div 100);
i:=i+1;
end;
writeln(i);
end.
Задача 1:
Code
Program pr1;
var N,k:longint;
function An(m:longint):longint;
var A:array [1..10] of integer;
i,j:integer;
begin
for i:=1 to 10 do A[i]:=0;
while (m>0) do
begin
A[m mod 10]:=A[m mod 10]+1;
m:=m div 10;
end;
j:=1;
for i:=1 to 10 do j:=j*10+A[i];
An:=j;
end;
begin
readln(N);
k:=N+1;
while (An(N)<>An(k) {and (k<=1000000000)} ) do k:=k+1;
writeln(k);
end.
Функция An представляет число N в виде массива, в котором индекс массива равен цифре в числе N, а значение массива по этому индексу равно количеству этих цифр в числе N, т.е. число 3426442 представится в виде массива {0,0,2,1,2,0,1,0,0,0} (отсчет с нуля). В таком случае два числа, составленные из одних и тех же чисел, будут иметь одинаковое представление.
Ну а в самой программе начинаем отсчет с введенного числа и сравниваем каждое последующее с помощью этой функции. Программа не претендует на оптимальность)))
p.s. в закомментированной строке по идее содержится проверка на не выход из максимально допустимого значения (т.е. если такого числа нет, то программа завершится не корректно), но почему-то ошибку выдает, а разбираться уже нет сил))) может кто подскажет)
p.p.s. третья задача не очень понятна.
"лесенка - это набор из горизонтальных ступенек"
"Вычислите количество лесенок"
т.е. нужно вычислить количество наборов горизонтальных ступенек? %)
хотя бы побольше примеров входных и выходных данных... 