Số N1 - Bài Tập Pascal Tổng Hợp

Số N1

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.
Previous
Next Post »