Sử dụng ngôn ngữ lập trình Pascal hãy lập chương trình giải các bài toán sau đây SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ TĨNH ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI TỈNH LỚP 11 THPT NĂM HỌC 2010 2011 Môn thi Tin học Bài[.]
SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ TĨNH ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI TỈNH LỚP 11 THPT - NĂM HỌC 2010 - 2011 Môn thi: Tin học Bài 1: Dãy lớn Ý tưởng thuật toán: Duyệt hết tất dãy tìm tổng chúng Đưa dãy có tổng lớn Thuật toán: Đọc N dãy số A[1],A[2], ,A[N] từ tệp liệu vào mmax:=0; For i:=1 to N For j:=1 to N Begin s:=0; {s tổng dãy xét, có kiểu liệu Longint} For k:=i to j s:=s+A[k]; If s>mmax then Begin mmax:=s; {mmax tổng lớn dãy xét Nếu s > mmax } imax:=i; {thì cập nhật giá trị mmax s ghi nhận số đầu cuối của} jmax:=j; {dãy lớn phục vụ cho việc truy xuất kết quả} End; End; End; Bài 2: Robot công nghiệp Ý tưởng thuật toán: Thực chất toán kiểm tra xem với xâu S cho trước gồm N (N chẵn N≤24) ký tự in hoa có phải xâu đối xứng có khác theo cặp đối xứng hay khơng? Thuật tốn: - Đọc N xâu S từ tệp liệu vào - Kiểm tra đầu xâu S xem ký tự có khác hay khơng? Nếu đầu xâu mà ký tự khơng khác đơi đưa kết luận xâu S lệnh Robot dừng thuật toán For i:=1 to (N div 2)-1 Begin dem:=0; For j:=i+1 to N div If S[i]=S[j] then Begin Inc(dem); If dem0 then Begin Write(f,'KHONG'); Close(f); Halt; End; End; End; - Nếu đầu xâu S có ký tự khác đội ta kiểm tra tính đối xứng xâu S (việc kiểm tra tính đối xứng xâu S bao gồm việc kiểm tra ký tự có khác đơi sau xâu S: Bởi sau xâu S khơng khác đơi khơng đảm bảo tính đối xứng xâu S) Để kiểm tra tính đối xứng xâu S, ta kiểm tra xem với giá trị i từ tới N S[i] có S[N-i+1] hay khơng? Nếu có kết luận xâu S lệnh Robot, khơng kết luận xâu S khơng phải lệnh Robot dem:=0; For i:=1 to N If S[i]=S[N-i+1] then Inc(dem); If dem=N then Writeln(f,'CO') else Write(f,'KHONG'); Bài 3: Tạo sơn tổng hợp Ý tưởng thuật toán: Thực chất toán liệt kê tất tổ hợp chập M N phần tử Thuật toán: Sử dụng thuật toán đệ quy quay lui Procedure Tao_tu(i:Integer); Var j:Integer; Begin For j:=1 to N If B[j] then {Nếu số j chưa chọn } Begin B[j]:=False; {Nếu số j chọn B[j]:=False} C[i]:=j; If i=M then Begin viet; {Ghi tệp SON.OUT giá trị C[k] với k=1 M} Inc(dem); End Else tao_tu(i+1); B[j]:=True; {Trả lại trạng thái ban đầu j – Quay lui} End; End; Trong chương trình thực hiện: - Nhập N, M từ bàn phím - Khởi tạo B[j]=True với j=1 N - Gọi thủ tục Tao_tu(1) ... Writeln(f,''CO'') else Write(f,''KHONG''); Bài 3: Tạo sơn tổng hợp Ý tưởng thuật toán: Thực chất toán liệt kê tất tổ hợp chập M N phần tử Thuật toán: Sử dụng thuật toán đệ quy quay lui Procedure Tao_tu(i:Integer);... đối xứng xâu S (việc kiểm tra tính đối xứng xâu S bao gồm việc kiểm tra ký tự có khác đơi sau xâu S: Bởi sau xâu S khơng khác đơi khơng đảm bảo tính đối xứng xâu S) Để kiểm tra tính đối xứng xâu... End Else tao_tu(i+1); B[j]:=True; {Trả lại trạng thái ban đầu j – Quay lui} End; End; Trong chương trình thực hiện: - Nhập N, M từ bàn phím - Khởi tạo B[j]=True với j=1 N - Gọi thủ tục Tao_tu(1)