1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề học sinh giỏi tỉnh Nghệ An năm 2011 2012 môn Tin Học19990

6 3 0

Đ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 6
Dung lượng 126,92 KB

Nội dung

ĐỀ HỌC SINH GIỎI TỈNH NGHỆ AN NĂM 2011-2012 MÔN TIN HỌC (Chú ý: Mọi chương trình tách modun nhằm hiểu thuật tốn, nên khơng có tối ưu thuật tốn để giảm thời gian hay dư thừa liệu Quý vị có nhiều cách giải hay hơn) Bài 1: Nén xâu Một xâu kí tự nén lại thành xâu cách nén kí tự giống đứng cạnh Ví dụ xâu AAAA nén thành 4A Hãy lập trình để nén xâu kí tự in hoa theo cách Dữ liệu: vào từ file văn NENXAU.INP xâu, mà kí tự chữ in hoa Kết quả: ghi vào file văn NENXAN.OUT xâu kí tự sau nén VD: Nenxau.inp Nenxau.out NNNAAAAFGGH 3N4AF2GH Ở có nhiều cách giải Mình đưa cách giải sau: - Nhóm phần tử giống lại tính chiều dài xâu - Nhóm cuối có số phần tử “bằng” “không bằng” Nên phải xử lý riêng Thuật toán: Xâu cần nén xâu ST - Đầu tiên tạo xâu có phần tử (S) (chính ký tự xâu cần nén (St)) S:=St[1]; - Duyệt từ phần tử thứ đến phần tử cuối cùng: for i:=2 to length(st) + Gặt phần tử xét St[i] bàng S[1] cộng vào xâu S + Nếu St[i] S[1]  Đã hết đoạn ký tự trùng (Xâu S gồm phần tử giống nhau)  Lưu lại độ dài xâu S vào tệp + ký tự xâu S; Tiến hành khởi lại xâu S:=St[i] (Bắt đầu đoạn mới) for i:=2 to length(st) if St[i]=S[1] then S:=S+St[i] else Begin if length(s)>1 then write(f,length(s)); write(f,S[1]); S:=St[i]; End; - Cịn vị trí = length(St) ta chưa lưu lại + sau vòng for xâu S có trường hợp - Chỉ ký tự cuối xâu St ThuVienDeThi.com - Đoạn cuối xâu St (nếu có nhiều PT giống nhau) if length(s)=1 then write(f,S) else write(f,length(s),S[1]); Chương trình hồn chỉnh Program NenXau; Var St:string; Procedure Docfile; var f:text; Begin assign(f,'nenxau.inp'); reset(f); readln(f,st); close(f); End; Procedure XuLy; var f:text; s:string; i:byte; Begin assign(f,'nenxau.Out'); rewrite(f); s:=st[1]; for i:=2 to length(st) if St[i]=S[1] then S:=S+St[i] else Begin if length(s)>1 then write(f,length(s)); write(f,S[1]); S:=St[i]; End; if length(s)=1 then write(f,S) else write(f,length(s),S[1]); close(f); End; Begin docfile; XuLy; End ThuVienDeThi.com Bài 2: Số nguyên tố đối xứng Một số nguyên dương T gọi số nguyên tố đối xứng thỏa mãn yêu cầu sau: - T số nguyên tố - T số đối xứng (đọc T từ trái qua phải thu kết giống đọc T từ phải qua trái) Ví dụ 12321 số đối xứng Yêu cầu: cho số nguyên dương A B, tìm số lượng số nguyên tố đối xứng T thỏa mãn A ≤ T ≤ B 100000 Dữ liệu: vào từ file văn NTDX.INP gồm dòng chứa số nguyên dương A B cách dấu cách (104 ≤ A < B bi≠bj Yêu cầu: kiểm tra hai dãy {aN},{bN} có tương thích ko? Dữ liệu: vào từ file văn DAYSO.INP: - Dòng đầu ghi số N - Dòng thứ ghi N số nguyên dãy số {aN} - Dòng thứ ghi N số nguyên dãy số {bN} (các số dòng ghi cách dấu cách ) Kết quả: ghi file văn DAYSO.OUT: Ghi số tương thích,trong trường hợp ngược lại ghi số VD: Dayso.inp Dayso.out Dayso.inp Dayso.out 4 1231 1231 3213 1233 Bài đề khó hiểu tơi hiểu sau Cho dãy số An, Bn Hai dãy số gọi tương thích nếu: Tại vị trí i mà với giá trị ji có (Ai=Aj Bi Bj) (AiAj Bi phải khác Bj) - Bài ta giả sử ban đầu g2 dãy tương thích Ta việc tìm vị trí mà (Ai=Aj ) (Bibj) (AiAj) (Bi=Bj) Thì lúc d2 dãy khơng cịn tương thích kt:=true; for i:=1 to N for j:=1 to N if ij then if((A[i]=A[j]) And (B[i]B[j])) or ((A[i]A[j]) And (B[i]=B[j])) then KT:=false; ThuVienDeThi.com Chương trình hồn chỉnh: Program DayTuongThich; Var A,B:array[1 10000] of Integer; n:integer; Procedure DocFile; Program DaySoTuongThich; Var f:text; i:integer; Begin assign(f,'DaySo.INp'); Reset(f); readln(f,n); For i:=1 to n read(f,A[i]); Readln(f); for i:=1 to n read(f,B[i]); close(f); End; Procedure Xuly; var i,j:integer; f:text; kt:boolean; Begin kt:=true; for i:=1 to N for j:=1 to N if ij then if((A[i]=A[j]) And (B[i]B[j])) or ((A[i]A[j]) And (B[i]=B[j])) then KT:=false; assign(f,'DaySo.OUT'); rewrite(f); if kt then write(f,1) else Write(f,0); close(f); End; Begin DocFile; XuLy; End ThuVienDeThi.com ... Nt(n:longint):boolean; var i:longint; kt:boolean; Begin kt:=true; for i:=2 to trunc(sqrt(n)) if n mod i = then kt:=false; NT:=kt; ThuVienDeThi.com End; Function DoiXung(N:longint):boolean; var N1,N2:longint;... 3213 1233 Bài đề khó hiểu tơi hiểu sau Cho dãy số An, Bn Hai dãy số gọi tương thích nếu: Tại vị trí i mà với giá trị ji có (Ai=Aj Bi Bj) (AiAj Bi phải khác Bj) - Bài ta giả sử ban đầu g2 dãy... Procedure Xuly; var i,j:integer; f:text; kt:boolean; Begin kt:=true; for i:=1 to N for j:=1 to N if ij then if((A[i]=A[j]) And (B[i]B[j])) or ((A[i]A[j]) And (B[i]=B[j])) then KT:=false; assign(f,'DaySo.OUT');

Ngày đăng: 25/03/2022, 14:04

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w