1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề và đáp án chọn HSG 12 môn TIN học năm học 2015 2016

9 352 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 122 KB

Nội dung

Đề và đáp án chọn HSG 12 môn TIN học năm học 2015 2016 Sở Giáo dục và Đào tạo Hải Dương. Đề và đáp án chọn HSG 12 môn TIN học năm học 2015 2016 Sở Giáo dục và Đào tạo Hải Dương. Đề và đáp án chọn HSG 12 môn TIN học năm học 2015 2016 Sở Giáo dục và Đào tạo Hải Dương.

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO

HẢI DƯƠNG

KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 12

NĂM HỌC 2015 - 2016 Môn: Tin học Thi ngày 07/10 /2015 Thời gian thi: 180 phút (Đề thi gồm 03 trang) Tổng quan về các bài thi trong đề

TT Tên bài chương trình Tên file Dữ liệu vào Kết quả in ra

Giới hạn thời gian

1 test chấm

Điểm

(Dấu * được thay thế bằng pas hoặc cpp tùy theo ngôn ngữ lập trình được sử dụng là pascal hoặc C++)

 Chú ý chương trình chỉ in kết quả theo yêu cầu, ngoài ra không in bất cứ một thông tin nào khác

 Chương trình chỉ sử dụng lệnh in (write, writeln đối với Pascal; printf(…), cout đối với C+

+) để in kết quả

 Đối với các bài tập đọc vào từ file văn bản và in kết quả ra file văn bản, tên của các file này phải đặt đúng theo yêu cầu đề bài Không có đường dẫn phía trước

Viết chương trình giải các bài toán sau:

Bài 1: Bán kính

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Trên mặt phẳng tọa độ Oxy cho 3 điểm A(x1,y1), B(x2,y2), C(x3,y3) Tính bán kính đường tròn ngoại tiếp tam giác ABC

Dữ liệu: Nhập vào từ bàn phím tọa độ 3 điểm A, B, C, mỗi điểm trên một dòng, trong

mỗi dòng các giá trị cách nhau một dấu cách, tọa độ là các số nguyên

Kết quả: In ra màn hình:

 Nếu ABC tạo thành một tam giác thì đưa ra bán kính đường tròn ngoại tiếp tam giác cần tìm, kết quả làm tròn 3 chữ số sau dấu chấm thập phân

 Ngược lại đưa ra No

Ví dụ:

0 0

1 0

0 1

2 2

3 3

No

ĐỀ CHÍNH THỨC

Trang 2

Bài 2: Số đẹp

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Định nghĩa số đẹp N là số mà tổng các ước số nguyên dương của nó không tính N thì bằng chính nó Ví dụ: 6=1+2+3; 6 là số đẹp

Hãy viết chương trình nhập vào một số tự nhiên N (0<N≤106) Kiểm tra xem nó có phải

là một số đẹp không

Dữ liệu : Nhập vào từ bàn phím

Kết quả: In ra màn hình dòng thông báo “Yes” nếu N là số đẹp Ngược lại in ra “No”.

Ví dụ:

Bài 3: Đếm chữ cái

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Bé Vân mới vào lớp mẫu giáo 5 tuổi Trong buổi học về nhận biết chữ cái, cô giáo viết lên bảng một dãy các chữ cái (theo bảng chữ cái Tiếng Anh) Cô yêu cầu Vân đếm xem trong dãy chữ cái đó có bao nhiêu chữ cái ‘e’ liên tiếp nhiều nhất Bạn hãy giúp Vân tìm ra điều đó

Dữ liệu: Nhập vào từ màn hình một dòng duy nhất chứa xâu kí tự s

Kết quả: In ra màn hình gồm:

Dòng thứ nhất in ra số nguyên K là số lượng kí tự ‘e’ liên tiếp nhiều nhất tìm được

Dòng thứ hai in ra K kí tự ‘e’ liên tiếp nhau

Ví dụ:

eeee

Bài 4: Siêu thị

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Phương tiện đi lại của người dân ở các ngôi làng chủ yếu là xe máy Giá xăng thì không giảm, do vậy khi đi mua sắm người dân ở các ngôi làng luôn tìm tới cửa hàng gần nhà mình nhất để mua hàng vì giá hàng hóa của các cửa hàng là như nhau Những người kinh doanh cũng rất nhạy bén để đáp ứng nhu cầu của người dân, họ chọn vị trí để xây siêu thị sao cho tổng khoảng cách từ siêu thị tới vị trí của các ngôi làng mà những người dân đang sinh sống

là nhỏ nhất

Dữ liệu: Đọc vào từ file văn bản BAI4.INP gồm có:

 Dòng đầu tiên chứa số nguyên dương N là số ngôi làng

Trang 3

 N dòng sau, mỗi dòng chứa hai số thực x, y lần lượt là tọa độ của các ngôi làng, hai giá trị cách nhau một dấu cách (0≤N≤106, |x|,|y|≤109, coi mỗi tọa độ là trung tâm của một ngôi làng)

Kết quả: Ghi ra file văn bản BAI4.OUT một giá trị duy nhất là tổng khoảng cách cần

tìm Kết quả làm tròn đến ba chữ số sau dấu chấm thập phân

Ví dụ:

3

0 0

3 3

3 4

4.000

Bài 5: Dãy chia hết (2 điểm)

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Xét một dãy số nguyên gồm N phần tử Viết dãy số đó theo thứ tự từ trái sang phải, sau

đó đặt giữa mỗi cặp số cạnh nhau dấu cộng ‘+’ hoặc ‘- ’, khi đó ta thu được một biểu thức số học Ta nói dãy số chia hết cho K nếu tồn tại một cách đặt dấu để thu được một biểu thức số học có giá trị chia hết cho K

Hãy xác định xem dãy số đã cho có chia hết cho K hay không?

Dữ liệu: File văn bản BAI5.INP:

Dòng đầu tiên là hai số nguyên N và K (2≤N≤104, 2≤K≤100)

Dòng tiếp theo là dãy N số nguyên, mỗi số có giá trị tuyệt đối không quá 104

Kết quả: Ghi ra file văn bản BAI5.OUT số 0 hoặc 1 tương ứng với dãy không chia hết

hoặc chia hết cho K

Ví dụ:

4 7

1 2 3 5

1 2 3 5

0

Ghi chú: Bài thi được chấm với 6 test, mỗi test chương trình cho kết quả đúng trong thời gian không quá 1 giây được 0,25 điểm

 2 test đầu tiên có , K �30

 2 test tiếp theo , 50 � �K 70

 2 test còn lại , 70� �K 100

-HẾT -Cán bộ coi thi không được giải thích gì thêm

Họ tên thí sinh:……… Số báo danh……….…

Trang 4

Giám thị số 1:……… Giám thị số 2:

……….

SỞ GIÁO DỤC VÀ ĐÀO TẠO

HẢI DƯƠNG

KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 12

NĂM HỌC 2015 - 2016 Môn: Tin học Thi ngày 07/10 /2015 Thời gian thi: 180 phút (Đáp án gồm 06 trang)

Tổng quan về các bài thi trong đề

chương trình Dữ liệu vào

Kết quả in ra

Giới hạn thời gian

1 test chấm

Điểm

(Dấu * được thay thế bằng pas hoặc cpp tùy theo ngôn ngữ lập trình được sử dụng là pascal hoặc C++)

 Chú ý chương trình chỉ in kết quả theo yêu cầu, ngoài ra không in bất cứ một thông tin nào khác

 Chương trình chỉ sử dụng lệnh in (write, writeln đối với Pascal; printf(…), cout đối với C+

+) để in kết quả

 Đối với các bài tập đọc vào từ file văn bản và in kết quả ra file văn bản Tên của các file này phải đặt đúng theo yêu cầu đề bài Không có đường dẫn phía trước

Bài 1: Bán kính

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Trên mặt phẳng tọa độ Oxy cho 3 điểm A(x1,y1), B(x2,y2), C(x3,y3) Tính bán kính đường tròn ngoại tiếp tam giác ABC

Dữ liệu: Nhập vào từ bàn phím tọa độ 3 điểm A, B, C, mỗi điểm trên một dòng, trong

mỗi dòng các giá trị cách nhau một dấu cách, tọa độ là các số nguyên

Kết quả: In ra màn hình:

 Nếu ABC tạo thành một tam giác thì đưa ra bán kính đường tròn ngoại tiếp tam giác cần tìm, kết quả làm tròn 3 chữ số sau dấu chấm thập phân

 Ngược lại đưa ra No

Ví dụ:

0 0

1 0

0 1

2 2

3 3

No

Thuật toán:

Tính độ dài các cạnh theo công thức d:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

Gọi a,b,c lần lượt là độ dài ba cạnh của 3 đoạn thằng a = AB, b = BC, c = AC

Nếu (a+b>c) and (b+c>a) and (c+a>b) thì ABC là độ dài ba cạnh của tam giác khi đó tính: p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

R=abc/(4*s);

ĐÁP ÁN ĐỀ CHÍNH THỨC

Trang 5

Nếu a/b = a/c = b/c thì ba điểm A, B, C thẳng hàng => Thông báo “NO”.

Code:

Var x1,x2,x3,y1,y2,y3:longint;

a,b,c,p,s,r:real;

Begin

Readln(x1,y1,x2,y2,x3,y3);

a:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

b:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));

c:=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));

if (a+b>c) and (b+c>a) and (c+a>b) then

begin

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

r:=abc/(4*s);

writeln(r:0:3);

end else writeln(“NO”);

end.

Bài 2: Số đẹp

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Định nghĩa số đẹp N là số mà tổng các ước số nguyên dương của nó không tính N thì bằng chính nó Ví dụ: 6=1+2+3; 6 là số đẹp

Hãy viết chương trình nhập vào một số tự nhiên N (0<N≤106) Kiểm tra xem nó có phải

là một số đẹp không

Dữ liệu : Nhập vào từ bàn phím

Kết quả: In ra màn hình dòng thông báo “Yes” nếu N là số đẹp Ngược lại in ra “No”.

Ví dụ:

input output

Thuật toán:

Dùng biến S để chứa tổng các ước

Khởi tạo S:= 0;

Sử dụng vòng lặp For để duyệt phần tử

Nếu N mod i=0 thì S:=S+i;

Nếu tổng ước S = N thì thông báo ‘Yes’, ngược lại, thông báo‘No’;

Code:

Var n,s:longint;

i:integer;

Begin

Readln(N);

S:=0;

For i:=1 to round(N/2) do

If N mod i = 0 then S:=S+I;

If S = N then writeln(“Yes”) else writeln(“No”)

End

Bài 3: Đếm chữ cái

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Bé Vân mới vào lớp mẫu giáo 5 tuổi Trong buổi học về nhận biết chữ cái Cô giáo viết lên bảng một dãy các chữ cái (theo bảng chữ cái Tiếng Anh) Cô yêu cầu Vân đếm xem trong dãy chữ cái đó có bao nhiêu chữ cái ‘e’ liên tiếp nhiều nhất Bạn hãy giúp Vân tìm ra điều đó

Trang 6

Dữ liệu: Nhập vào từ màn hình một dòng duy nhất chứa xâu kí tự s

Kết quả: In ra màn hình gồm:

Dòng thứ nhất in ra số nguyên K là số lượng kí tự ‘e’ liên tiếp nhiều nhất tìm được Dòng thứ hai in ra K kí tự ‘e’ liên tiếp nhau

Ví dụ:

eeee

Thuật toán

Duyệt dãy kí tự nhập vào;

Khởi tạo một biến đếm, dem: = 0;

Duyệt từng kí tự nếu gặp kí tự e thì tăng biến đếm lên một đơn vị, nếu gặp ký tự khác kí tự e thì biến đếm trở lại ban đầu (dem:=0);

Trong quá trình duyệt số kí tự e liên tiếp nhiều nhất trước khi gặp kí tự khác thì được coi là dãy

kí tự e dài nhất

Sau đó in ra số lượng và dãy kí tự e dài nhất

Code:

Var dem,max,i:word;

s:string;

Begin

dem:=0; max:=0;

For i:=1 to length(s) do

if s[i]=’e’ then

begin

dem:=dem+1;

if dem>max then max:=dem;

end;

writeln(max);

for i:=1 to dem do write(‘e’);

end

Bài 4: Siêu thị

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Phương tiện đi lại của người dân ở các ngôi làng chủ yếu là xe máy Giá xăng thì không giảm, do vậy khi đi mua sắm người dân ở các ngôi làng luôn tìm tới cửa hàng gần nhà mình nhất để mua hàng vì giá hàng hóa của các cửa hàng là như nhau Những người kinh doanh cũng rất nhạy bén để đáp ứng nhu cầu của người dân, họ chọn vị trí để xây siêu thị sao cho tổng khoảng cách từ siêu thị tới vị trí của các ngôi làng mà những người dân đang sinh sống

là nhỏ nhất

Dữ liệu: Đọc vào từ file văn bản BAI4.INP gồm có:

 Dòng đầu tiên chứa số nguyên dương N là số ngôi làng

 N dòng sau, mỗi dòng chứa hai số thực x, y lần lượt là tọa độ của các ngôi làng, hai giá trị cách nhau một dấu cách (0≤N≤106, |x|,|y|≤109, coi mỗi tọa độ là trung tâm của một ngôi làng)

Kết quả: Ghi ra file văn bản BAI4.OUT một giá trị duy nhất là tổng khoảng cách cần

tìm Kết quả làm tròn đến ba chữ số sau dấu chấm thập phân

Ví dụ:

BAI4.INP BAI4.OUT 3

Trang 7

3 3

3 4

Thuật toán:

Có nhiều cách để giải bài toán, tuy nhiên thuật toán tối ưu là sắp xếp dãy tọa độ của các ngôi

nhà theo thứ tự không giảm (khi mảng x thay đổi kéo theo mảng y cũng thay đổi) Dùng thuật toán quicksort để sắp xếp sẽ nhanh vì n≤106 Nếu dùng thuật toán nổi bọt để sắp xếp thù chương trình chạy chậm sẽ không được điểm tối đa

Sau khi sắp xếp xong ta sẽ tìm được vị trí tọa độ xây siêu thị là xp=(x[1]+y[n])/2; yp=(y[1]+y[n])/2;

Sau đó tính tổng khoảng cách từ các điểm tới xp, yp chính là đáp án cần tìm

S=d1+d2+…+dn (di=sqrt((x[i]-xp)*( x[i]-xp)+ y[i]-yp)*( y[i]-yp));

Code:

Const tfi= “BAI4.INP”;

tfo= “BAI4.OUT”;

Var x,y:array[1 maxn] of double;

S,Xp,Yp:double ;

N:longint;

fi,fo:text;

Procedure doc;

Begin

Readln(N);

For i:=1 to N do

Readln(x[i],y[i]);

End;

Procedure quicksort(k,l:longint)

Var tg,tgx,tgy:double;

i,j:longint;

Begin

tg:=(x[l]+x[l])/2;

i:=k; j:=l;

repeat

While (tg>x[i]) do i:=i+1;

While (tg<x[j]) do j:=j-1;

if i<=j then begin tgx:=x[i]; x[i]:=x[j]; x[j]:=tgx;

tgy:=y[i]; y[i]:=y[j]; y[j]:=tgy;

i:=i+1; j:=j-1;

end;

until i>j;

if (i<l) then quicksort(i,l);

if (j>k) then quicksort(k,j);

End;

BEGIN

Assign(fi,tfi);

Reset(fi);

Assign(fo,tfo);

Rewrite(fo);

Doc();

Quicksort(1,n);

Trang 8

Xp:=(x[1]+y[n])/2;

Yp:=(y[1]+y[n])/2;

S:=0;

For i:=1 to n do

s:=s+sqrt((x[i]-xp)*(x[i]-xp)+(y[i]-yp)*(y[i]-yp));

Write(s:0:3);

END

Bài 5: Dãy chia hết (2 điểm)

(Ghi chú: Trong chương trình không sử dụng dòng lệnh uses crt; và lệnh clrscr;)

Xét một dãy số nguyên gồm N phần tử Viết dãy số đó theo thứ tự từ trái sang phải, sau

đó đặt giữa mỗi cặp số cạnh nhau dấu cộng ‘+’ hoặc ‘- ’, khi đó ta thu được một biểu thức số học Ta nói dãy số chia hết cho K nếu tồn tại một cách đặt dấu để thu được một biểu thức số học có giá trị chia hết cho K

Hãy xác định xem dãy số đã cho có chia hết cho K hay không?

Dữ liệu: File văn bản BAI5.INP:

Dòng đầu tiên là hai số nguyên N và K (2≤N≤104, 2≤K≤100)

Dòng tiếp theo là dãy N số nguyên, mỗi số có giá trị tuyệt đối không quá 104

Kết quả: Ghi ra file văn bản BAI5.OUT ghi số 0 hoặc 1 tương ứng với dãy không chia

hết hoặc chia hết cho K

Ví dụ:

4 7

Ghi chú: Bài thi được chấm 6 test, mỗi test chương trình cho kết quả đúng trong thời gian không quá 1 giây được 0.25 điểm

 2 test đầu tiên có n≤1000, k≤30

 2 test tiếp theo 1000≤n≤5000, 50≤K≤70

 2 test còn lại 5000≤N≤10000, 70≤K≤100

Thuật toán:

Với cách tiếp cận đơn giản nhất ta chỉ cần thử với tất cả các trường hợp điền dấu ‘+’ , ‘-’ Sau

đó tính tổng giá trị biểu thức và kiểm tra xem có cóa chia hết cho K hay không Tuy nhiên cách tiếp cận này chương trình không thể chạy được với n lớn do vậy cần có thuật toán tối ưu hơn Sau đây là code tối ưu nhất

Code:

Const MAX_N = 10000;

MAX_K = 100;

Ifn= “BAI5.INP”;

Ofn= “BAI5.OUT”

Var a: array[1 MAX_N] of Integer;

t: array[0 1, 0 MAX_K-1] of Boolean;

i, i1, i2, j, z: Integer;

BEGIN

Assign(F, iFn); Reset(F);

ReadLn(F, n, k);

for i := 1 to n do

begin

Read(F, a[i]);

a[i] := (a[i] mod k + k) mod k;

Trang 9

end;

Close(F);

t[0, a[1]] := true;

for i := 2 to n do

begin

i1 := i and 1;

i2 := 1 - i2;

FillChar(t[i2], k, 0);

for j := k-1 downto 0 do

if t[i1, j] then

begin

t[i2, (j - a[i]+ k) mod k] := true; t[i2, (j + a[i]) mod k] := true; end;

end;

Assign(F, oFn); Rewrite(F);

Write(F, Ord(t[i2, 0]));

Close(F);

END

Ngày đăng: 20/01/2019, 08:55

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w