100 đề Toán Tin Tin học & Nhà trường


Bài 58/2001 - Tổng các số tự nhiên liên tiếp



tải về 1.1 Mb.
trang19/22
Chuyển đổi dữ liệu26.07.2016
Kích1.1 Mb.
#6336
1   ...   14   15   16   17   18   19   20   21   22

Bài 58/2001 - Tổng các số tự nhiên liên tiếp

(Dành cho học sinh THCS và PTTH)


Program bai58;

Uses crt;

var N:longint;

m,i,dem,a,limit:longint;



procedure Solve;

begin

Writeln('Chia so ',N,':');

limit:=trunc(sqrt(1+8*N)+1) div 2;

for m:=2 to limit-1 do

if ((N-m*(m-1) div 2) mod m =0) then

begin

a:=(N-m*(m-1) div 2) div m;

inc(dem);

writeln('+ Cach thu ',dem,' :');



for i:=a to a+m-1 do

begin

write(' ',i);



if (i-a+1) mod 10=0 then writeln;

end;

writeln;


end;

end;

BEGIN

clrscr;


writeln('Nhap N: ');readln(N);

Solve;


if dem=0 then writeln('Khong the chia!')

else writeln('Co tat ca', dem,' cach chia!');

readln;


END.

(Lời giải của bạn Nguyễn Quốc Quân - Lớp 11 T - Trường PTTH Lê Viết Thuật - Vinh)



Bài 59/2001 - Đếm số ô vuông

(Dành cho học sinh THCS và PTTH)



Uses crt;

Const Ngang = ‘ngang.inp’;

Doc = ‘doc.inp’;

Max = 100;

n: integer = 0;

count: integer =0;

Var f1,f2:text;

o,i,j:integer;

a,b,c:array[1..max] of boolean;

BEGIN

clrscr;


Assign(f1,ngang); Assign(f2,doc);

Reset(f1); Reset(f2);



While not eoln(f1) do

begin

Read(f1,o);

Inc(n);

If o=1 then a[n]:=true

else a[n]:=false

end;

Readln(f1);



for i:= 1 to n do

begin

for j:= 1 to n do

begin

Read(f1,o);



If o=1 then b[j]:=true

else b[j]:=false;

end;

Readln(f1);



for j:=1 to n+1 do

begin

Read(f2,o);



If o=1 then c[j]:=true

else c[j] := false

end;

Readln(f2);



for j:=1 to n do

begin

If (a[j] and b[j] and c[j] and c[j+1]) then

inc(count);



end;

a:=b;


end;

Close(f1); Close(f2);

Write('Co', count, ‘hinh vuong!’);

Readln;


END.

(Lời giải của bạn Nguyễn Chí Thức - Lớp 10A1 - Khối chuyên Toán Tin - ĐH Sư phạm Hà Nội)


Bài 60/2001 - Tìm số dư của phép chia

(Dành cho học sinh Tiểu học)

Vì 1976 và 1977 là 2 số nguyên liên tiếp nên nguyên tố cùng nhau, do đó số thoả mãn điều kiện của bài toán phải có dạng:

n = 1976*1977*k +76 (k là số nguyên)

nhưng 1976*1977 lại chia hết cho 39 nên phần dư của n khi chia cho 39 sẽ là 37 (= 76 - 39).


Bài 61/2001 - Thuật toán điền số vào ma trận


(Dành cho học sinh THCS và PTTH)

Program Bai61;

Uses crt;

Var a:array[2..250,2..250] of -1..1;

n,i,j:integer;

BEGIN


Write('Doc vao n:'); Readln(n);

Fillchar(a, sizeof (a), 0);

for i:=1 to n do

for j:=1 to n do

begin

If (i mod 2 <> 0) and (j mod 2 <> 0) then a[i,i] := 1;



If (i mod 2 = 0) and (j mod 2 = 0) then a[i,i] := -1;

end;


Writeln('Mang da dien la: ');

for i:=1 to n do

begin

for j:=1 to n do Write(a[i,j]:3);



Writeln;

end;


Write('Tong lon nhat la:');

If n mod 2 = 0 then Write(0) else Write(n);

Readln;

END.


(Lời giải của bạn Trương Đức Hạnh - 12 Toán Năng Khiếu - Hà Tĩnh)

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.


Bài 64/2001 - Đổi ma trận số

(Dành cho học sinh THCS và PTTH)

Program DoiMT;

Uses Crt;

Const nmax=50;

inp='INPUT.TXT'; {Du lieu duoc nhap vao file input.txt}

Type Mang=array [1..nmax,1..nmax] of real;

Var a,b,c: Mang;

n,i,j: integer;
Procedure Nhap;

Var i,j: integer;

f: text;

Begin


Assign(f,inp); Reset(f);

Readln(f,n);

For i:=1 to 2*n do

begin


For j:=1 to 2*n do Read(f,c[i,j]);

Readln(f);

end;

Close(f);



End;

Procedure Xuat(a: Mang);

Var i,j: integer;

Begin


For i:=1 to 2*n do

begin


For j:=1 to 2*n do Write(a[i,j]:8:2);

Writeln;


end;

End;


BEGIN

Nhap;


For i:=1 to n do

For j:=1 to n do

begin

a[i+n,j+n]:=c[i,j];



a[i,j+n]:=c[i+n,j];

a[i,j]:=c[i+n,j+n];

a[i+n,j]:=c[i,j+n];

b[i,j]:=c[i+n,j];

b[i,j+n]:=c[i,j];

b[i+n,j+n]:=c[i,j+n];

b[i+n,j]:=c[i+n,j+n];

end;


ClrScr;

Xuat(c); {mang ban dau}

Writeln;

Xuat(a);


Writeln;

Xuat(b);


Readln;

END.



tải về 1.1 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   14   15   16   17   18   19   20   21   22




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương