Encontrei este exercicio em um forum de programação e informatica. Um tanto engenhoso, devo admitir, e é otimo para praticar diferentes linguagens de programação, que podem exercitar muitos paradigmas. Infelizmente o professor pediu para fazer em Pascal.
o número 3025 possui a seguinte caracteristica: 30+25=55 e 55*55=3025. Escreva um programa que escreva todas os números com quatro algarismos que possuem a citada características.
Veja que solução elegante temos com ruby:
>> (1000..9999).find_all{|x| (x/100+x%100)**2 == x} => [2025, 3025, 9801]
Entretanto tive a apelar para uma sujeira (alguem percebe?) na versão em haskell:
Prelude> import List Prelude List> findIndices(\x -> ((x `div` 100)+(x `mod` 100))^2 == x && x > 1000)[0..9999] [2025,3025,9801]
Por fim, um simples ‘one liner’ usando gawk
$ seq 1000 9900 | gawk '(int($1/100) + $1%100) == sqrt($1){print}' 2025 3025 9801
É claro que a solução esperada é algo como
#include <math.h> #include <stdio.h> int main(){ int i; for(i=1000;i<=9999;i++){ if(((i/100)+(i%100))==sqrt(i)) printf("%d\n",i); } return 0; }
Até ANSI C é mais elegante – sem flamewars por favor, afinal todos sabem o que são programadores de verdade
[?]