Xét
một số N có 4 chữ số và không phải tất cả các chữ
số đều giống nhau. Phép tính độ lệch được
thực hiện như sau:
Tạo số thứ
nhất N1 bằng cách xếp các chữ số theo trình tự giảm
dần
Tạo số thứ hai
N2 bằng cách xếp các chữ số theo trình tự tăng dần
(nếu có chữ số 0 ở đầu thì N2 sẽ không phải là số
có 4 chữ số)
Tính
hiệu N1-N2 và gán lại cho N
Các bước
trên được thực hiện cho đến khi nhận được số N là
6174 hoặc 0
Ví dụ: Nếu
N=1023
- Ở bước 1: N1=3210, N2=123, N=N1-N2=3087
- Ở bước 2: N1=8730, N2=378, N=N1-N2=8352
- Ở bước 3: N1=8532, N2=2358, N=N1-N2=6174
Vậy ta cần
thực hiện 3 lần biến đổi
Yêu
cầu: Hãy xác định số lần
biến đổi thực hiện theo yêu cầu trên.
Dữ
liệu: Nhập từ bàn phím số
nguyên dương N (N đảm bảo có 4 chữ số, không phải tất
cả các chữ số đều giống nhau và N khác 6174. Không cần
kiểm tra dữ liệu nhập)
Kết
quả: Ghi ra màn hình số lần
biến đổi tương ứng với số N
Ví
dụ: Dữ
liệu nhập: 5364 Kết quả in ra: 3
var
i,j,k,dem:longint;
S,St:string;
N1,N2,N:longint;
tg:char;
f1,f2:text;
function
sxt(S:string):longint;
begin
for i:=1
to length(S)-1 do
for
j:=i+1 to length(S) do
if
S[i] > S[j] then
begin
tg:=S[i];
S[i]:=S[j];
S[j]:=tg;
end;
val(S,k);
sxt:=k;
end;
{--------------------------------------------------------}
function
sxg(S:string):longint;
begin
for i:=1
to length(S) - 1 do
for
j:=i+1 to length(S) do
if S[i] < S[j] then
begin
tg:=S[i];
S[i]:=S[j];
S[j]:=tg;
end;
val(S,n);
sxg:=n;
end;
{--------------------------------------------------------}
begin
assign(f1,'scl.inp');reset(f1);
assign(f2,'scl.out');rewrite(f2);
read(f1,S);
dem:=1;N:=1;
while ( N
<> 6174 ) and ( N <> 0 ) do
begin
N1 := sxg(S) ;
N2 := sxt(S) ;
N := N1 - N2;
if (N <> 0) and (N <> 6174) then inc(dem);
str(N,S);
end;
write(f2,dem);
close(f1);close(f2);
end.
Sign up here with your email
ConversionConversion EmoticonEmoticon