|
Written by Administrator
|
|
Saturday, 15 March 2008 15:59 |
|
Source : Olympiades Tunisiennes d'Informatique, TOI 2003 Un entier de n chiffres (1<n<9) est dit bien ordonné si ses chiffres forment, de gauche à droite, une suite strictement croissante. Exemple : L'entier de trois chiffres, 147 est bien ordonné car 1<4<7. L'entier de 4 chiffres, 1265 n'est pas bien ordonné car 6>5. Écrire un programme qui saisit un entier n (1<n<9) et fait sortir tous les entiers bien ordonnés de n chiffres et le nombre total de ces entiers. Correction PROGRAM WELL_ORDERED; USES wincrt; VAR n : INTEGER; i,mn,mx,p : LONGINT; PROCEDURE min_max(n:integer; VAR min,max:LONGINT); VAR i : INTEGER; BEGIN min:=0; max:=0; FOR i:=1 to n do BEGIN min:=10*min + i; max:=10*max + (9-n+i); END; END; FUNCTION w_ordered(m:LONGINT):BOOLEAN; VAR i,c1,c2 :INTEGER; valide :BOOLEAN; BEGIN IF m<10 THEN BEGIN w_ordered:=TRUE END ELSE BEGIN REPEAT c1:=m MOD 10; m:= m DIV 10; c2:= m MOD 10; valide :=(c1>c2); UNTIL NOT(valide) OR (m<10); w_ordered:=valide; END; END; PROCEDURE saisie(VAR m:integer); BEGIN REPEAT WRITE('Donner un entier n compris entre 1et 9 : ');READLN(m); UNTIL m in [2..8]; END; BEGIN saisie(n); min_max(n,mn,mx); p:=0; FOR i:=mn to mx DO BEGIN IF w_ordered(i) THEN BEGIN p:=p+1; writeln(p:10,' - ',i); END; END; END.
|