Циклы. Задачи на
цикл while
Задача A. Список квадратов
Выведите все точные квадраты натуральных
чисел, не превосходящие данного числа N.
Формат входных данных
Задано единственное число N.
Формат выходных данных
Необходимо вывести все точные квадраты
натуральных чисел, не превосходящие данного числа N.
Пример
Ввод
|
Вывод
|
50
|
1 4 9 16 25 36 49
|
Задача B. Минимальный делитель
Дано целое число, не меньшее 2. Выведите его
наименьший натуральный делитель, отличный от 1.
Пример
Задача C. Список степеней двойки
По данному числу N
распечатайте все целые степени двойки, не превосходящие N,
в порядке возрастания.
Операцией возведения в степень пользоваться
нельзя!
Примеры
Ввод
|
Вывод
|
50
|
1 2 4 8 16 32
|
Задача D. Точная степень двойки
Дано натуральное число N.
Выведите слово YES, если число N
является точной степенью двойки, или слово NO в противном
случае.
Операцией возведения в степень пользоваться
нельзя!
Примеры
Входные данные
|
Выходные данные
|
1
|
YES
|
4
|
YES
|
5
|
NO
|
Задача E. Двоичный логарифм
По данному натуральному числу N выведите такое наименьшее целое число k, что 2k≥N.
Операцией возведения в степень пользоваться
нельзя!
Примеры
Задача F. Утренняя пробежка
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 10% от
предыдущего значения. По данному числу y определите номер
дня, на который пробег спортсмена составит не менее y
километров.
Программа получает на вход действительные
числа x и y и должна вывести одно
натуральное число.
Примеры
Входные данные
|
Выходные данные
|
10
20
|
9
|
Задача G. Банковские проценты
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов,
после чего дробная часть копеек отбрасывается. Каждый год сумма вклада
становится больше. Определите, через сколько лет вклад составит не менее y рублей.
Программа получает на вход три натуральных
числа: x, p, y и
должна вывести одно целое число.
Примеры
Входные данные
|
Выходные данные
|
100
10
200
|
8
|
Задача H. Числа Фибоначчи
Последовательность Фибоначчи определяется так:
φ0=0, φ1=1, ..., φn=φn-1+φn-2.
По данному числу n
определите n-е число Фибоначчи φn.
Примеры
Задача I. Номер числа Фибоначчи
Дано натуральное число A
> 1. Определите, каким по счету числом Фибоначчи оно является, то есть
выведите такое число n, что φn=A. Если А не является числом Фибоначчи, выведите
число -1.
Примеры
Задача J. Исполнитель Раздвоитель
Исполнитель “Раздвоитель” преобразует
натуральные числа. У него есть две команды: “Вычесть 1”
и “Разделить на 2”, первая команда уменьшает число на 1, вторая команда
уменьшает число в два раза, если оно чётное, иначе происходит ошибка.
Дано два натуральных числа A и B (A>B).
Напишите алгоритм для Развоителя, который преобразует число A в число B и при
этом содержит минимальное число команд. Команды алгоритма нужно выводить по
одной в строке, первая команда обозначается, как -1, вторая команда как :2.
Примеры
Ввод
|
Вывод
|
179
20
|
-1
:2
-1
:2
:2
-1
-1
|
Задача K. Исполнитель Водолей
У исполнителя “Водолей” есть два сосуда,
первый объемом A литров, второй объемом B литров, а также кран с водой. Водолей может выполнять следующие
операции:
Наполнить сосуд A
(обозначается >A).
Наполнить сосуд B
(обозначается >B).
Вылить воду из сосуда A
(обозначается A>).
Вылить воду из сосуда B
(обозначается B>).
Перелить воду из сосуда A
в сосуд B (обозначается как A>B).
Перелить воду из сосуда B
в сосуд A (обозначается как B>A).
Команда переливания из одного сосуда в другой
приводят к тому, что либо первый сосуд полностью опустошается, либо второй
сосуд полность наполняется.
Программа получает на вход три натуральных
числа A, B, N,
не превосходящих 104 Вам необходимо вывести алгоритм действий Водолея, который
позволяет получить в точности N литров в одном из сосудов,
если же такого алгоритма не существует, то программа должна вывести текст Impossible.
Количество операций в алгоритме не должно
превышать 105. Гарантируется, что если задача имеет решение, то есть решение,
которое содержит не более, чем 105 операций.
Примеры
Ввод
|
Вывод
|
3
5
1
|
>A
A>B
>A
A>B
|
3
5
100
|
Impossible
|
Задача A. Список квадратов
var n,i:integer;
begin
read(n);
i:=1;
while i<=n do
begin
if sqrt(i)=int(sqrt(i)) then
write(i,' ');
i:=i+1;
end;
end.
var n,i:integer;
begin
read(n);
i:=1;
while i<=sqrt(n) do
begin
write(i*i,' ');
i:=i+1;
end;
end.
Задача B. Минимальный делитель
var n,i:integer;
begin
read(n);
i:=2;
while (i<=n) and (n mod i<>0) do
i:=i+1;
write(i);
end.
Задача C. Список степеней двойки
var n,i:integer;
begin
read(n);
i:=1;
while i<=n do
begin
write(i,' ');
i:=i*2;
end;
end.
Задача D. Точная степень двойки
var n,i:integer;
begin
read(n);
i:=1;
while (i<=n) do
i:=i*2;
if i div 2=n then write('YES')
else write('NO');
end.
Задача E. Двоичный логарифм
var n,i,k:longint;
begin
read(n);
i:=1;
k:=0;
while i<n do
begin
i:=i*2;
k:=k+1;
end;
write(k);
end.
Задача F. Утренняя пробежка
var x,y,i:real;
k:integer;
begin
read(x,y);
k:=1;
i:=x;
while i<y do
begin
i:=i+0.1*i;
k:=k+1;
end;
write(k);
end.
Задача G. Банковские проценты
var x,y,i,p:real;
k:integer;
begin
read(x,p,y);
k:=0;
i:=x;
while i<y do
begin
i:=i+int(p*i)/100;
k:=k+1;
end;
write(k);
end.
Задача H. Числа Фибоначчи
var n,i,f0,f1,f:longint;
begin
read(n);
f0:=0;
f1:=1;
i:=2;
if n<2 then write(n)
else
begin
while i<=n do
begin
f:=f0+f1;
f0:=f1;
f1:=f;
i:=i+1
end;
write(f);
end
end.
Задача I. Номер числа Фибоначчи
var n,f0,f1,f,a:longint;
begin
read(a);
f0:=0;
f1:=1;
n:=0;
while f<=a do
begin
f:=f0+f1;
f0:=f1;
f1:=f;
n:=n+1
end;
if f0=a then write(n)
else write(-1);
end.
Задача J. Исполнитель Раздвоитель
var a,b:longint;
begin
read(a,b);
while b<a do
if a>=2*b then
begin
if a mod 2=0 then
begin
a:=a div 2;
writeln(':2');
end
else
begin
a:=a-1;
writeln('-1');
end;
end
else
begin
a:=a-1;
writeln('-1');
end;
end.
Задача K. Исполнитель Водолей
const
LIMIT=100000;
var
a,b,n:longint;
min,max:char;
reall:boolean;
bV,aV,k:longint;
begin
read(a,b,n);
min:='A';
max:='B';
reall:=false;
if a>b then
begin
min:='B';
max:='A';
a:=a+b;
b:=a-b;
a:=a-b;
end;
aV:=0;
bV:=0;
k:=0;
while k<=LIMIT do
begin
inc(k,2);
if (b - bV >= a)
then inc(bV,a)
else
begin
bV:= a - (b - bV);
inc(k,2);
end;
if (n = bV) then
begin
reall := true;
break;
end;
end;
if reall then
begin
bV:=0;
while true do
begin
writeln('>',min);
writeln(min,'>',max);
if b-bV>=a then inc(bV,a)
else
begin
bV := a-(b - bV);
writeln(max,'>');
writeln(min,'>',max);
end;
if (n = bV) then break;
end;
end
else
writeln('Impossible');
end.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.