Đề thi Về các số đặc biệt có 10 chữ số

doc1 trang | Chia sẻ: haohao | Lượt xem: 828 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Đề thi Về các số đặc biệt có 10 chữ số, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 88/2001 - Về các số đặc biệt có 10 chữ số
(Dành cho học sinh THCS và THPT)
Thuật toán: mảng a[0..9] lưu kết quả, t[i] là số các chữ số i trong a. Theo bài ta có thể suy ra: a[0] + a[1] + ... + a[9] = số các chữ số 0 + số các chữ số 1 + ... + số các chữ số 9 = 10. Như vậy, ta dùng phép sinh đệ quy có nhánh cận để giải bài toán: ở mỗi bước sinh a[i], ta tính tổng các chữ số a[0]..a[i] (lưu vào biến s), nếu s >10 thì không sinh tiếp nữa. Sau đây là toàn bộ chương trình:
Procedure bai88;
const fo='bai88.out';
var a,t:array[0..9] of integer;
 i,s:integer;
 f:text;
procedure save;
 var i:integer;
begin
 for i:=0 to 9 do if a[i] t[i] then exit;
 for i:=0 to 9 do write(f,a[i]); writeln(f);
end;
procedure try(i:integer);
 var j:integer;
begin
 for j:= 0 to 9 do
 if ((i=j) and (t[j] +1 <=a[j]))) and (s<=10) then
 begin
 a[i]:=j;
 inc(t[j]);
 s:=s+j;
 if i<9 then try(i+1) else save;
 dec(t[j]);
 s:=s-j;
 end;
end;
BEGIN
 assign(f,fo);rewrite(f);
 for i:=1 to 9 do
 begin
 fillchar(t,sizeof(t),0);
 s:=0;
 a[0]:=i;
 s:=s+i;
 t[i]:=1;
 try(1);
 end;
 close(f);
END.
(Lời giải của bạn Nguyễn Chí Thức - Lớp 11A1 khối PTCTT - ĐHSP Hà Nội)

File đính kèm:

  • docDe thi Toan Tin hoc trong nha truong Bai 88.doc