Đề thi chọn học sinh giỏi cấp tỉnh Tuyên Quang lớp 12 - THPT năm học 2009 - 2010 môn: Tin học
Bài 1.
Trong kỳ thi vào trường Chuyên, lớp chuyên Hóa học: điểm môn Hóa tính hệ số 3, Toán và Ngữ văn tính hệ số 1; xếp loại kết quả thi theo điểm trung bình (ĐTB) với quy tắc:
- ĐTB dưới 5,0: Yếu
- ĐTB từ 5,0 đến dưới 7,0: Trung bình
- ĐTB từ 7,0 đến dưới 8,0: Khá
- ĐTB từ 8,0 đến 10,0: Giỏi
Lập chương trình tính điểm trung bình và xếp loại kết quả thi của các thí sinh dự thi vào lớp chuyên Hóa học (số lượng học sinh bất kỳ nhập từ bàn phím) và đưa họ tên, điểm trung bình, kết quả xếp loại ra màn hình.
SỞ GIÁO DỤC VÀ ĐÀO TẠO TUYÊN QUANG ĐỀ CHÍNH THỨC ĐỀ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 12 NĂM HỌC 2009-2010 Môn: Tin học Thời gian: 180 phút (Không kể thời gian giao đề) Đề thi có 02 trang Tổng quan đề thi: Tên bài Tính điểm Số nguyên tố cùng nhau Đếm xâu đối xứng Yên ngựa File bài làm Bai1.pas Bai2.pas Bai3.pas Bai4.pas Dữ liệu vào Bàn phím NTCN.INP PALIN.INP YENNGUA.INP Dữ liệu ra Màn hình NTCN.OUT PALIN.OUT YENNGUA.OUT Điểm 5 5 5 5 Chú ý: 1. Bài thi được làm trên ngôn ngữ lập trình Pascal. 2. Chương trình của Bài 1, Bài 2, Bài 3, Bài 4 phải ghi lên đĩa với tên tương ứng là Bai1.pas, Bai2. pas, Bai3. pas, Bai4. pas trong thư mục D đặt tên SBD của mình ví dụ: D:\SBD01\Bai1. pas Bài 1. Trong kỳ thi vào trường Chuyên, lớp chuyên Hóa học: điểm môn Hóa tính hệ số 3, Toán và Ngữ văn tính hệ số 1; xếp loại kết quả thi theo điểm trung bình (ĐTB) với quy tắc: - ĐTB dưới 5,0: Yếu - ĐTB từ 5,0 đến dưới 7,0: Trung bình - ĐTB từ 7,0 đến dưới 8,0: Khá - ĐTB từ 8,0 đến 10,0: Giỏi Lập chương trình tính điểm trung bình và xếp loại kết quả thi của các thí sinh dự thi vào lớp chuyên Hóa học (số lượng học sinh bất kỳ nhập từ bàn phím) và đưa họ tên, điểm trung bình, kết quả xếp loại ra màn hình. Bài 2. Hai số tự nhiên được gọi là hai số nguyên tố cùng nhau nếu ước số chung lớn nhất của hai số đó bằng 1. Yêu cầu: Hãy xác định hai số tự nhiên x, y (1 < x, y < 65535) có phải là hai số nguyên tố cùng nhau hay không? Dữ liệu vào: Được lấy từ file văn bản NTCN.INP, có cấu trúc như sau: Ghi 2 số tự nhiên x, y trên cùng một dòng và cách nhau bởi một kí tự dấu cách. Dữ liệu ra: Ghi ra file văn bản NTCN.OUT, theo cấu trúc như sau: Nếu x và y là hai số nguyên tố cùng nhau thì ghi số 1, ngược lại thì ghi số 0. Ví dụ: NTCN.INP NTCN.OUT 8 15 1 Bài 3. Một xâu kí tự được gọi là xâu đối xứng (Palindrome) nếu ta đọc từ trái sang phải hay đọc từ phải sang trái đều giống nhau. Một kí tự cũng được coi là một xâu đối xứng. Xâu con của S là xâu gồm một số kí tự liên tiếp trong S. Yêu cầu: Cho trước một xâu kí tự S (kí tự đầu và kí tự cuối khác kí tự dấu cách). Hãy xác định số xâu đối xứng là xâu con của nó. Dữ liệu vào: Được lấy từ file văn bản PALIN.INP gồm nhiều dòng (không quá 100 dòng), mỗi dòng là một xâu có chiều dài không quá 80 kí tự. Dữ liệu ra: Được ghi vào file văn bản PALIN.OUT có số dòng bằng số dòng của PALIN.INP, mỗi dòng chứa một số nguyên biểu thị số xâu con đối xứng của dòng tương ứng trong PALIN.INP Ví dụ: PALIN.INP PALIN.OUT J IOI MIT TIM 1 4 10 Bài 4. Cho một ma trận hai chiều A cấp m x n. Phần tử A[i,j] được gọi là yên ngựa nếu nó là số lớn nhất trong cột j và là số nhỏ nhất trong hàng i. Yêu cầu: Tìm số phần tử yên ngựa của ma trận A. Dữ liệu vào: Được lấy từ file YENNGUA.INP có cấu trúc như sau: - Dòng thứ nhất gồm hai số nguyên dương m, n (m,n ≤100) - m dòng tiếp theo mỗi dòng gồm n số nguyên, các số nguyên cách nhau bởi một dấu cách là ma trận A (A[i,j] có giá trị tuyệt đối ≤ 10000) Dữ liệu ra: Được ghi vào file YENNGUA.OUT gồm một số nguyên duy nhất là số lượng yên ngựa trong ma trận A VÝ dô: YENNGUA.INP YENNGUA.OUT 3 4 4 3 6 5 9 -2 -9 4 6 0 7 2 1 (Ví dụ trên có duy nhất một yên ngựa là phần tử A[1,2] ) Cán bộ coi thi không giải thích gì thêm. ----------------HẾT----------------- SỞ GIÁO DỤC VÀ ĐÀO TẠO TUYÊN QUANG ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI CẤP TỈNH NĂM 2009 Môn: Tin học Lớp: 12 (Đáp án gồm 01 trang) Cách chấm điểm: Dùng các bộ test, chạy trực tiếp chương trình để chấm trực tiếp trên máy: Với các bộ test sau: Bài InPut OutPut Điểm Bài 1: Chạy trực tiếp chương trình, cho kết quả đúng 5 Bài 2: 5 8 15 1 2 2 2009 1 2 2010 2000 0 1 Bài 3: 5 A 1 2 AYA 4 2 TIK KIT 10 1 Bài 4: 5 3 4 4 3 6 5 9 -2 -9 4 6 0 7 2 1 2 2 2 1 2 2 1 0 1 4 5 8 9 5 7 5 6 8 5 6 5 4 2 4 9 3 0 1 3 5 2 4 2 LƠI GIAI THAM KHAO Bài 1 Có nhiều phương án giải quyết bài toán này (GV tự nghiên cứu) Bài 2. Số nguyên tố Program NTCN; Const fi='NTCN.inp'; fo='NTCN.out'; Var m,n:Longint; Procedure doc; Var f:text; Begin Assign(f,fi); Reset(f); Readln(f,m,n); Close(f); End; Function Ucln(m,n:Longint):Longint; Var r:longint; Begin r := m mod n; While r 0 do Begin m:=n; n:=r; r:= m mod n; end; Ucln:=n; End; Procedure Ghi; Var f:text; Begin Assign(f,fo); ReWrite(f); If ucln(m,n) = 1 then Writeln(f,1) Else Writeln(f,0); Close(f); End; BEGIN Doc; Ghi; END. Bài 3. Xâu Program Bai1; Const fi='PALIN.INP'; fo='PALIN.OUT'; maxN=100; Var A:array[0..maxN+1] of string; N:longint; f,g:text; Procedure Input; Var s:string; Begin assign(f,fi); reset(f); assign(g,fo); rewrite(g); n:=0; while not eof(f) do begin readln(f,s); inc(n); A[n]:=s; end; close(f); End; Function Check_Palin(s:string;i,k:longint):boolean; Var temp:string; j:longint; Begin check_palin:=false; temp:=copy(s,i,k); for j:=1 to length(temp) div 2 do if temp[j]temp[length(temp)-j+1] then exit; check_palin:=true; End; Function Count_Palin(s:string):longint; Var count,i,k:longint; Begin count:=0; for i:=1 to length(s) do for k:=1 to length(s)-i+1 do if check_palin(s,i,k) then inc(count); count_palin:=count; End; Procedure Process; Var i:longint; Begin for i:=1 to n do writeln(g,count_palin(A[i])); close(g); End; BEGIN Input; Process; END. Bài 4. Yên ngựa var A:array[1..100,1..100] of integer; maxj,mini:array[1..100] of integer; M,N,dem :integer; F:Text; {**********************} procedure Doc_file; var i,j:integer; f:Text; Begin Assign(f,'D:\B2IN.TXT'); Reset(f); readln(f,M,N); for i:=1 to M do Begin for j:=1 to N do read(f,A[i,j]); Readln(f); End; End; {***********************} Procedure Xd_max_cot; var i,j:integer; Begin for i:=1 to N do maxj[i]:=A[1,i]; for i:=2 to M do for j:=1 to N do if A[i,j]>=maxj[j] then maxj[j]:=A[i,j]; End; {************************} Procedure Xd_min_dong; var i,j:integer; Begin for i:=1 to M do mini[i]:=A[i,1]; for i:=1 to M do for j:=2 to N do if A[i,j]<=mini[i] then mini[i]:=A[i,j]; End; {*************************} Procedure count; var i,j:integer; Begin dem:=0; for i:=1 to M do for j:=1 to N do if (A[i,j]=maxj[j]) and (A[i,j]=mini[i]) then inc(dem); End; {**************************} procedure Xu_ly; Begin Xd_max_cot; Xd_min_dong; count; End; {*************************} BEGIN Doc_file; Assign(f,'D:\B2OUT.TXT'); rewrite(f); Xu_ly; Write(f,dem); Close(f); END.
File đính kèm:
- De thi HSG Tin hoc 12_2009.doc