Jul 22

Решаем маленькую задачку на число Армстронга…

Число Армстронга представляет собой такое число из k цифр, именно для которого сумма k-х степеней цифр его равняется самому числу, вот к примеру: 153=1^3+5^3+3^3...

Попробуем теперь найти пятерку самых больших чисел Армстронга, которые состоят из не больше, чем n цифр.

Необходимо отметить, что программка наша также должна считать выходые данные из файла под названием input.txt и выводить полученный результат в output.txt

Давайте сейчас покажем пример с комментариями по ходу решения данной задачки.

program Project2;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

j,n,n1,n2,i,t,q,r,y,o,s,b:integer;

k:string;

g:array[1..100] of integer;

begin

reset(input,'input.txt');

rewrite(output,'output.txt');

readln(n);

n2:=9;

for i:=1 to n-1 do

begin

n2:=n2*10+9;

end;

n:=1; //Это есть разрядность самого числа... в данном случае будем начинать с однозначного

o:=10; //Это есть делитель, используемый с целью определения последующей разрядности числа

for i:=1 to n2 do //Это цикл перебора чисел

begin

s:=i mod o; //Для проверки какое число(Однозначное либо двузначное)

if s=0 then //В том случае когда остаток от деления = 0 то получили мы следующее по разрядности число

begin

n:=n+1; //Для увеличения разрядности числа

o:=o*10; //Для увеличения делителя

end;

k:=inttostr(i); //Здесь разбиваем число на нужные составляющие

for j:=1 to n do //Перебираем все составляющие числа

begin

r:=1; //это изначальный множитель

for t:=1 to n do //приводим цикл возведения в степень

begin

q:=strtoint(k[j]); //В этом случае переводим составляющую из типа строкового в числовой

r:=r*q; //Тут перемножаем

end;

y:=y+r; //Ищем сумму составляющих степеней

end;

if i=y then //Приравниваем число с суммой степеней его составляющих

begin

b:=b+1; //в том случае ежели совпало

g[b]:=i; //то пишем число в массив

end;

y:=0; //приводим к обнулению саму сумму

end;

for i:=b-4 to b do //Цикл перебора последних пяти чисел массива

begin

append(output);

write(g[i],' ');

end;

close(input);

close(output);

end.

П.С. Часто бывает интересно решить какую-то новенькую задачу, ведь грамотные задачки хорошо подходят для нагрузки мозгов и улучшения профессионального уровня программиста.

Спонсор поста: Вы серьезно интересуетесь сферой IT, компьютерами и блогосферой? Последние и самые свежие новости интернета всегда есть возможность узнать на веб-сайте webhorn.ru! Посещая представленный интернет-ресурс Вы всегда будете знать первым о том, что происходит в компьютерном мире!



Поделитесь вашими мыслями

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>