Sujet bac 2010 25 mai à 14 h Solution 1 :
program bac2010__25mai___14h;
uses wincrt;
var y,i,n:integer;
ok:boolean;
function pow (x:integer;p:integer):integer;
var puissance,i:integer;
begin
puissance:=1;
for i:=1 to p do begin
puissance:=puissance*x;
end;
pow:=puissance;
end;
function verif(x:integer;p:integer):boolean;
var s,m,c,d,u:integer;
ok:boolean;
begin
m:=x div 1000;
c:=(x mod 1000) div 100;
d:=(x mod 100) div 10;
u:=x mod 10;
s:=pow(m,p)+pow(c,p)+pow(d,p)+pow(u,p);
if s=x then ok:=true else ok:=false;
verif:=ok;
end;
begin
for i:=1000 to 9999 do begin
y:=1;
ok:=false;
repeat
ok:=verif(i,y) ; y:=y+1
until ((y >5) or ok);
if ok then
writeln(i,' verifie la condition ');
end;
end.
Solution 2 :
program hkb;
uses wincrt;
var
i:integer;
function pow(x,y:integer):integer ; var
i,p:integer;
begin p:=1;
for i:= 1 to y do p:=p*x;
pow:=p;
end;
procedure verif(x:integer);
var
k,n,s:integer;
begin n:=x;
k:=0;
repeat k:=k+1;
s:=0;
x:=n;
repeat
s:=s+pow((x mod 10),k);
x:=x div 10;
until x = 0;
until (k=5)or(s=n);
if s=n then begin
writeln('n = ',n,' k = ',k);
readln;
end else
writeln('ne verifie pas la propriete');
end;
begin
for i:=1000 to 9999 do verif(i);
end.