b. Tương tự như thế: chữ số 9 là lớn nhất, nhưng sau chữ số 9 đầu tiên lại chỉ còn lại 4 chữ số (mà ta cần giữ lại số có 8 chữ số), nên ta không thể chọn số 9 là chữ số đứng đầu trong 8 chữ số cần tìm. Chữ số lớn thứ hai là 7, có hai chữ số 7, tất nhiên ta chọn chữ số 7 đầu tiên (vì sau chữ số 7 thứ 2 chỉ còn lại 6 chữ số). Lí luận tương tự, ta tìm được chữ số thứ hai trong 8 chữ số cần tìm cũng là chữ số 7, và 6 chữ số còn lại phải tìm tất nhiên là 6 chữ số sau chữ số 7 này. Bài 55/2001 - Bài toán che mắt mèo
(Dành cho học sinh THCS và PTTH)
Program Che_Mat_meo;
Uses crt;
Const td=200;
Var i,j,n:integer;
out:string;
f:text;
Procedure Xuli;
Begin
for i:=1 to n do
begin
gotoxy(15,i+3);
for j:=1 to n do
begin
if (odd(i))and(odd(j)) then
begin
textcolor(11);
if out<>'' then write(f,'M ')
else
begin
write('M ');
delay(td);
end;
end
else
begin
textcolor(14);
if out<>'' then write(f,'o ')
else
begin
write('o ');
delay(td);
end;
end;
end;
writeln(f);
end;
End;
BEGIN
Clrscr; textcolor(2);
Write('Nhap n= ');
Readln(n);
if n<=20 then out:=''
else
begin
out:='matmeo.inp';
writeln('Mo File meo.inp de xem ket qua');
end;
Assign(f,out);
Rewrite(f);
writeln(f,'(Chu M Ki hieu cho con meo, chu o ki hieu cho quan co)');
Xuli; writeln(f);
Writeln(f,'Tong cong co ',sqr((n+1) div 2),' con meo');
Close(f);
Readln;
END.
(Lời giải của bạn Đỗ Ngọc Sơn - Quảng Ninh)
Bài 56/2001 - Chia lưới
(Dành cho học sinh PTTH)
Program Chia_luoi ;
Uses Crt ;
Const Fi = 'LUOI.INP';
Fo = 'LUOI.OUT';
Var A : Array[1..20,1..20]Of Integer ;
B : Array[1..20,1..20]Of 0..1 ;
Px,Py: Array[1..4] Of ShortInt ;
M,N,S,S1,S2 : LongInt ;
F : Text ;
Procedure Read_Input ;
Var i,j :Integer;
Begin
Clrscr ; S:= 0 ;
Assign(F,Fi) ;Reset(F) ;
Readln(F,M,N);
For i:=1 to M do
Begin
For j:=1 to N do
Begin
Read(F,A[i,j]);
S:=S+A[i,j];
End;
Readln(F);
End;
Close(F);
End;
Procedure Innit ;
Begin
S1 := S div 2;
Px[1]:= 0 ;Px[2]:= 0 ;Px[3]:=1 ;Px[4]:=-1 ;
Py[1]:= 1 ;Py[2]:=-1 ;Py[3]:=0 ;Py[4]:= 0 ;
End ;
Procedure Write_Output ;
Var i,j :Integer;
Begin
Assign(F,Fo); ReWrite(F);
For i:=1 to M do
Begin
For j:=1 to N do
Write(F,B[i,j],' ');
Writeln(F);
End;
Close(F);Halt;
End;
Function Ktra(x,y : Integer) : Boolean ;
Begin
Ktra:= False ;
If (x in [1..M]) And (y in [1..N]) And
(B[x,y] = 0 ) Then Ktra := True ;
End;
Procedure Try(x,y:Integer ;Sum :LongInt);
Var i :Integer ;
Begin
For i:=1 to 4 do
If Ktra(x+Px[i],y+Py[i]) Then
Begin
x := x + Px[i] ;
y := y + Py[i] ;
Sum := Sum + A[x,y];
B[x,y] := 1;
If Sum = S2 Then Write_Output ;
Try(x,y,Sum) ;
Sum := Sum - A[x,y];
B[x,y] := 0;
x := x - Px[i] ;
y := y - Py[i] ;
End ;
End;
Procedure Run ;
Var i,j : Integer ;
Begin
Read_Input ;Innit ;
For i:=1 to M do
For j:=1 to N do
If A[i,j]>= S1 Then
Begin
Fillchar(B,SizeOf(B),0);
B[i,j]:=1;
Write_Output;
End ;
For S2 := S1 downto 1 do
Begin
Fillchar(B,SizeOf(B),0);
B[1,1]:=1;
Try(1,1,A[1,1]);
End;
End;
BEGIN
Run;
END.
(Lời giải của bạn Lê Sơn Tùng - Vĩnh Phúc )
Bài 57/2001 - Chọn số (Dành cho học sinh Tiểu học và THCS )
Giả sử có m số 1, n số -1 (m, n nguyên dương) theo giả thiết:
a) m + n = 2000, suy ra m, n cùng tính chẵn lẻ.
+ Nếu m chẵn, do đó n cũng chẵn, ta chọn ra m/2 số 1 và n/2 số -1.
+ Nếu m lẻ, n lẻ:
m = 2k +1 = k + (k + 1)
n = 2q +1 = q + (q + 1)
Luôn có: k - q = (k+1) - (q+1), do đó ta sẽ chọn k số 1 và q số -1.
Vậy ta luôn có thể chọn ra các số thỏa mãn điều kiện của bài toán.
b) m + n = 2001 -> m và n không cùng tính chẵn lẻ.
+ Nếu m chẵn -> n phải là lẻ:
m = 2k = i + j (giả sử chọn i số 1, giữ lại j số 1)
n = 2q +1 = t + s (giả sử chọn t số -1, giữ lại s số -1)
Theo cách chọn này -> i, j phải cùng tính chẵn lẻ; t, s không cùng tính chẵn lẻ.
Giả sử i chẵn, j chẵn, t lẻ, s chẵn, do đó: i + t j + s, như vậy cách chọn này không thỏa mãn. Các trường hợp còn lại xét tương tự.
Do đó, với trường hợp này không thể có cách chọn nào thỏa mãn điều kiện của bài toán.
Chia sẻ với bạn bè của bạn: |