Đề thi Chèn Xâu

doc3 trang | Chia sẻ: haohao | Lượt xem: 1103 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Đề thi Chèn Xâu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 62/2001 - Chèn Xâu
(Dành cho học sinh THCS và PTTH)
Do sơ xuất khi ra đề nên trong số các lời giải của bạn đọc gửi đến toà soạn, có thể các bạn đã hiểu đề bài theo 2 cách sau đây, ta coi như hai bài toán:
1. Nếu theo ví dụ, thì ta cần chèn dấu vào xâu (không cần đủ 9 số như trong xâu S, có thể bớt một số số cuối của xâu, nhưng phải theo thứ tự) để phép tính nhận được bằng M cho trước. 
2. Ta không để ý đến ví dụ của đề ra, yêu cầu cần chèn dấu vào giữa các số trong xâu '123456789' để nhận được kết quả M cho trước. 
Sau đây là lời giải của bạn Nguyễn Chí Thức (hiểu theo bài toán 1):
Program Bai62;
Uses crt;
Const fo = 'chenxau.out';
 dau: array[1..3] of String[1]= ('', '-', '+');
 s:array[1..9] of char=('1','2','3','4','5','6','7','8','9');
Var d:array[1..9] of String[1];
 m:longInt;
 f:text;
 k:integer;
 found:boolean;
Procedure Init;
Begin
 Write('Cho M=');
 Readln(m);
 found:=false;
end;
Function tinh(s:string):longint;
Var i,t:longint;
 code:integer;
Begin
 i:=length(s);
 While not(s[i] in ['-','+']) and (i>0) do dec(i);
 val(copy(s,i+1,length(s)-i),t,code);
 If i=0 then begin tinh:=t; exit; end
 else 
 begin
 delete(s,i,length(s)-i+1);
 If s[i]='+' then tinh:=t+tinh(s);
 If s[i]='-' then tinh:=tinh(s)-t;
 end;
End;
Procedure Test(i:integer);
Var st:string; j:integer;
Begin
 st:='';
 For j:=1 to i do st:=st+d[j]+s[j];
 If Tinh(st) = m then begin writeln(f,st); found:=true; end;
End;
Procedure Try(i:integer);
Var j:integer;
Begin
 for j:=1 to 3 do
 begin
 d[i]:=dau[j]; Test(i);
 If i<9 then try(i+1);
 end;
End;
BEGIN
 Clrscr;
 Init;
 Assign(f,fo);Rewrite(f);
 for k:=1 to 2 do
 begin
 d[1]:=dau[k];
 Try(2);
 end;
 If not found then write(f,'khong co ngiem');
 Close(f);
END.
Từ lời giải trên của bạn Thức, để thoả mãn yêu cầu của bài toán 2, trong thủ tục Try cần sửa lại như sau: 
Procedure Try(i:integer);
Var j:integer;
Begin
 for j:=1 to 3 do
 begin
 d[i]:=dau[j]; 
 If i<9 then try(i+1);
 If i=9 then Test(i);
 end;
End;
Bài 63/2001 - Tìm số nhỏ nhất 
(Dành cho học sinh Tiểu học)
a. Số đó chia hết cho 9 nên tổng các chữ số của nó phải chia hết cho 9. Ta thấy tổng 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45 chia hết cho 9. Vậy số nhỏ nhất bao gồm tất cả các chữ số 0, 1, 2, ..., 9 mà chia hết cho 9 là: 1023456789.
b. Số này chia hết cho 5 nên tận cùng phải là 0 hoặc 5. Nếu tận cùng là 5 thì số nhỏ nhất sẽ là 1023467895 còn nếu số đó tận cùng là 0 thì số nhỏ nhất sẽ là123457890. 
So sánh hai số trên, suy ra số nhỏ nhất phải tìm là: 1023467895 
c. Một số chia hết cho 20, do đó phải chia hết cho 10. Suy ra số đó phải là số nhỏ nhất tận cùng là 0. Mặt khác, chữ số hàng chục của số đó phải là một số chẵn. Vì vậy ta tìm được số phải tìm là 1234567980. 

File đính kèm:

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