- Теория:
- Алгоритмы:
- Числа:
|
ГЛАВА III
ОБЩИЕ ЗАДАЧИ
Палиндромы и числа Фибоначчи
|
1. Найти первое число Фибоначчи , большее 10, являющееся палиндромом.
2. Найти первое число Фибоначчи, большее 10, сумма цифр которого – двузначный палиндром.
3. Найти количество палиндромов и количество фибоначчиевых чисел в интервале от 10 до 1000.
|
1. Найти первое число Фибоначчи , большее 10, являющееся палиндромом.
Ответ: 55 - палиндром и число Фибоначчи
program block3_01;
uses crt;
var
p: boolean; {флаг условия задачи}
i : integer; {ряд натуральных чисел, больших 10}
x, xx, c, x1 :integer ; {переменные для поиска палиндромов:
x - исходное число;
xx - дубликат исходного числа;
x1 - обратное число;
c - цифра исходного числа}
ch, ch1, ch2: integer;
{переменные для поиска чисел Фибоначчи:
ch - число Фибоначчи;
ch1, ch2 - два предыдущих числа ряда Фибоначчи}
begin
clrscr;
i:=10; {первое проверяемое число}
p:=false;
while p=false do{пока не выполнится условие задачи, цикл будет продолжаться}
begin
x:=i; {число i изменяется только для внешнего цикла, поэтому будем проверять его дубликат}
ch1:=0; ch2:=1; ch:=1; {алгоритм для поиска чисел Фибоначчи}
repeat
ch1:=ch2;
ch2:=ch-1;
ch:=ch1+ch2;inc(ch); until (x<ch) ;
if x = ch-1 then
{если Х - число Фибоначчи, то имеет смысл дальнейшая проверка}
begin
writeln( x ,'- число Фибоначчи') ;
xx:=x; {создали дубликат исходного числа}
x1:=0;
while xx< >0 do {применим алгоритм разделения числа на цифры для сборки обратного числа}
begin
c:=xx mod 10;
xx:=xx div 10;
x1:=x1*10+c; {учитываем порядок цифр числа}
end;
writeln('x1=',x1);
{если обратное число равно дубликату исходного числа:}
If x1=x then p:=true; {если p=true, то внешний цикл завершается}
end;
inc(i) {готовим следующее число для проверки}
end;
writeln(x, ' - палиндром и число Фибоначчи')
end.
|
2. Найти первое число Фибоначчи, большее 10, сумма цифр которого – двузначный палиндром.
Ответ:
1597 - число Фибоначчи
Sc = 22 - палиндром
program block3_02;
uses crt;
var p: boolean; {флаг условия задачи}
i :integer; {ряд натуральных чисел, больших 10}
x, xx, c, x1 :integer ; {переменные для поиска палиндромов:
x - исходное число;
xx - дубликат исходного числа;
c - цифра исходного числа}
ch,ch1,ch2: integer; {переменные для поиска чисел Фибоначчи:
ch - число Фибоначчи;
ch1, ch2 - два предыдущих числа ряда Фибоначчи}
Sc, Sc1:integer; {Sc - сумма цифр очередного числа Фибоначчи;
Sc1 - дубликат суммы цифр для поиска палиндрома;
x1 - обратное число суммы цифр}
begin
clrscr;
i:=10;{первое проверяемое число}
p:=false;
while p=false do {пока не выполнится условие задачи, цикл будет продолжаться}
begin
x:=i; {число i изменяется только для внешнего цикла, поэтому будем проверять его дубликат}
ch1:=0; ch2:=1; ch:=1; {алгоритм для поиска чисел Фибоначчи}
repeat ch1:=ch2;
ch2:=ch-1;
ch:=ch1+ch2;
inc(ch);
until (x<ch) ;
if x = ch-1 then {если Х - число Фибоначчи, то имеет смысл дальнейшая проверка} begin
xx:=x; {создали дубликат исходного числа}
Sc:=0;
while xx< >0 do {применим алгоритм разделения числа на цифры для поиска суммы цифр}
begin
c:=xx mod 10;
xx:=xx div 10;
inc(Sc,c); {Найдем сумму цифр числа}
end;
x1:=0; {x1 - обратное число суммы цифр}
Sc1:=Sc; {создали дубликат суммы цифр числа}
while Sc1 < >0 do {применим алгоритм разделения числа на цифры для сборки обратного числа}
begin
c:=Sc1 mod 10;
Sc1:=Sc1 div 10;
x1:=x1*10+c; {после окончания этого цикла - палиндром суммы цифр = x1}
end;
{если обратное число двузначное, а так же равно сумме цифр числа:}
If (x1 div 10> 0) and (x1=Sc) then p:=true; {если p=true, то внешний цикл завершается}
end;
inc(i) {готовим следующее число для проверки}
end;
writeln( x,'- число Фибоначчи') ;
writeln( ' Sc = ',Sc, '- палиндром')
end.
|
3. Найти количество палиндромов и количество фибоначчиевых чисел в интервале от 10 до 1000.
Ответ:
количество фибоначчиевых чисел = 10
количество палиндромов = 99
program block3_03;
uses crt;
var
i : integer; {ряд натуральных чисел, больших 10}
ch, ch1, ch2: integer;
{переменные для поиска чисел Фибоначчи:
ch - число Фибоначчи;
ch1, ch2 - два предыдущих числа ряда Фибоначчи} x, c, x1 :integer ; {переменные для поиска палиндромов:
x - дубликат исходного числа;
x1 - обратное число;
c - цифра исходного числа}kolfib, kolpal: integer; {количество чисел Фибоначчи и палиндромов}
begin
clrscr;
i:=10;{первое проверяемое число}
while i<=1000 do {пока не закончится интервал, цикл будет продолжаться}
begin
x:=i; {число i изменяется только для внешнего цикла, поэтому будем проверять его дубликат}
ch1:=0; ch2:=1; ch:=1; {алгоритм для поиска чисел Фибоначчи}
repeat ch1:=ch2;
ch2:=ch-1;
ch:=ch1+ch2;inc(ch);
until (x<ch) ;
if x = ch-1 then inc(kolfib); {если Х - число Фибоначчи, то увеличим количество фибоначчиевых чисел}
x:=i; {восстановим дубликат исходного числа}
x1:=0; {сначала в переменной для сборки палиндрома - ноль}
while x < >0 do {применим алгоритм разделения числа на цифры для сборки обратного числа}
begin
c:=x mod 10;
x:=x div 10;
x1:=x1*10+c; {собираем обратное число }
end;
If x1=i then inc(kolpal); {если обратное число равно исходному, то увеличим количество палиндромов}
inc(i) {готовим следующее число для проверки}
end;
writeln( 'количество фибоначчиевых чисел = ':40,kolfib) ;
writeln( 'количество палиндромов = ':40,kolpal) ;
writeln;
end.
|
|
|
|
|