Đề thi Về các số đặc biệt có 10 chữ số
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:
- De thi Toan Tin hoc trong nha truong Bai 88.doc