Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 63 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
63
Dung lượng
197,32 KB
Nội dung
CHUYÊN ĐỀ SỐ NGUYÊN LỚN Cộng hai số nguyên lớn Bước 1: Xử lí cho hai số nguyên có chiều dài Bước 2: Chuyển kí tự hai số nguyên lớn vào hai mảng Bước 3: Tiến hành cộng hai mảng ( Cộng từ phải sang trái) Bước 4: Xử lí mảng kết Program so_nguyen_lon_cong; Type mang=array[1 255] of longint; Var a,b,c:mang; i,m,code,nho:Longint; st1,st2:String; Begin Write('Nhap so a=');Readln(st1); Write('Nhap so b=');Readln(st2); // Xu li hai chuoi nhap vao -While (Pos(' ',st1)0) delete(st1,pos(' ',st1),1); While (Pos(' ',st2)0) delete(st2,pos(' ',st2),1); While length(st1)>length(st2) st2:='0'+st2; While length(st2)>length(st1) st1:='0'+st2; // Thuat toan m:=length(st1); For i:=1 to m Begin val(st1[i],a[i],code); val(st2[i],b[i],code); End; nho:=0; For i:=m downto Begin c[i]:=a[i]+b[i]+nho; nho:=c[i] div 10; End; Writeln('Ket qua phep cong la:'); // -Xu li mang ket qua For i:=2 to m c[i]:=c[i] mod 10; For i:=1 to m Write(c[i]); Readln; End Trừ hai số nguyên lớn Bước 1: Xử lí cho hai số nguyên có chiều dài xác định số trừ số bị trừ Bước 2: Chuyển kí tự hai số bị trừ số trừ vào mảng Bước 3: Tiến hành trừ hai mảng ( Trừ từ phải sang trái) Bước 4: Xử lí mảng kết Program so_nguyen_lon_tru; Type mang=array[1 255] of longint; Var a,b,c:mang; i,m,code:Longint; st1,st2,sbt,st,dau:String; Begin Write('Nhap so bi tru=');Readln(st1); Write('Nhap so tru=');Readln(st2); // Xu li hai chuoi nhap vao -Trang While (Pos(' ',st1)0) delete(st1,pos(' ',st1),1); While (Pos(' ',st2)0) delete(st2,pos(' ',st2),1); While length(st1)>length(st2) st2:='0'+st2; While length(st2)>length(st1) st1:='0'+st1; // Tim so bi tru va tim so tru -If st1>st2 then Begin sbt:=st1; st:=st2;dau:=''; End Else Begin sbt:=st2; st:=st1;dau:='-'; End; // Thuat toan m:=length(sbt); For i:=1 to m Begin val(sbt[i],a[i],code); val(st[i],b[i],code); End; For i:=m downto Begin c[i]:=a[i]+10-b[i]; If a[i]max then max:=Tong(I,j); // Truy vet de in ket qua -For i:=1 to n-1 For j:=i+1 to n If Tong(i,j) =max then inkq(i,j); Readln; End Bài 7: Dãy K phần tử có tổng lớn program DC_Tong_Max_K_pt; uses crt; type mang=array[1 100] of longint; var a:mang; i,j,n,dau,max,vt,d:longint; // -Chuong trinh tính tổng từ x đến K phân tử Function Tong(x:Longint):Longint; Var i:Longint; Begin Tong:=0; For i:= x to x+k-1 Tong:=tong+a[i]; End; // -Thu tuc in day ket qua Procedure inkq(x:Longint); Var i:Longint; Begin For i:=x to x+k-1 Write(a[i],' '); Writeln; End; // Than chuong trinh begin clrscr; write('nhap so phan tu=');readln(n); for i:=1 to n begin write('a[',i,']=');readln(a[i]); end; // Thuat toan tìm max -Max:=-maxlongint; For i:=1 to n-1 For j:=i+1 to n If Tong(i)>max then max:=Tong(i); // Truy vet de in ket qua -For i:=1 to n-1 For j:=i+1 to n If Tong(i) =max then inkq(i); Readln; End Bài 8: Dãy dài có tổng chia hết cho K Trang Program DC_max_pt_chiahet_k; var a:array[1 100] of longint; n,i,j,max,k:longint; // -Kiem tra tong cac pt tu x den y co chia het cho k khong Function kt(x,y:longint):boolean; Var i,t:longint; begin t:=0; For i:=x to y t:=t+a[i]; If t mod k=0 then kt:=True Else kt:=False; End; // -Procedure inkq(x,y:Longint); Var i:Longint; Begin For i:=x to y Write(a[i],' '); Writeln; End; Begin Write('Nhap n=');readln(n); For i:=1 to n Begin Write('A[',i,']=');readln(a[i]); End; Write('k=');Readln(k); // -Thuat toan tim Max max:=1; For i:=1 to n-1 For j:=i+1 to n If kt(i,j) then If (j-i+1)>max then max:=j-i+1; // Truy vet de in ket qua If max1 then Begin For i:=1 to n-1 For j:=i+1 to n If kt(i,j) then If (j-i+1)=max then inkq(i,j); End Else Writeln('Khong co day thoa kieu kien'); Readln; end Bài 9: Trò chơi với băng số: Viết dãy lên băng số, ô chứa giá trị a[i], chia băng số thành nhiều đoạn cho tổng số đoạn nhau: Program bangso; var a:array[1 100] of longint; i,n,tong:longint; ok:boolean; // CTC kiểm tra dãy có chia thành k đoạn, đoạn =TC -Function kt(k:longint;tc:longint):boolean; Var i, d, t:longint; begin d:=0;t:=0; Trang End; Begin end For i:=1 to n Begin t:=t+a[i]; If t=tc then Begin d:=d+1; t:=0; End; End; If d=k then kt:=true else kt:=false; // Write('Nhap n=');readln(n); Tong:=0; For i:=1 to n Begin Write('A[',i,']=');readln(a[i]); Tong:=tong+a[i]; End; // -For i:=n downto If kt(i,tong div i) then Begin Write(i,' doan, moi doan bang ',tong div i); ok:=true; Break; End; If not(ok) then Write('Khong thuc hien duoc tro choi!'); Readln; CHUYÊN ĐỀ MẢNG CHIỀU (Nhập - Sắp xếp – Xóa- Chèn- Tần suất) Bài 1:Sắp xếp mảng tăng dần, nhập x chèn vào cho mảng tăng dần Bài 2: Nhập mảng N phần tử: a) Hãy xếp số lớn lên dầu dãy, số nhỏ cuối dãy, nh ững s ố lại b) Hãy xếp số chẵn chia hết cho lên đầu dãy, số lẽ chia h ết cho xuống cuối dãy, số lại c) Hãy xếp lại mảng theo thứ tự số ước chúng tăng dần N ếu nhi ều s ố có số ước xếp số nhỏ đứng trước số lớn d) Hãy xóa vị trí thứ k mảng ( Sử dụng thủ tục xóa) e) Hãy chèn X vào vị trí thứ k dãy (dùng thủ tục chèn) f) Tìm kiếm thay thế: Hãy tìm tất c ặp số c ạnh có t chia h ết cho 10 thay số tổng chúng g) Nhập dãy tăng, sai nhập lại, nhập -1 dừng tính tổng (bỏ -1) h) Nhập dãy n pt, In hình số âm tăng dần, số d ương gi ảm d ần i) Đếm số phân tử khác nhau, tần suất xuất phần tử CHUYÊN ĐỀ CHUỖI KÍ TỰ Tuần suất: a) Tần suất kí tự chữ khơng phân biệt hoa thường; tần suất kí t ự số; b) Kí tự xuất nhiều vị trí xuất hiện, số lần xuất HƯỚNG DẪN GIẢI a) Tần suất kí tự chữ khơng phân biệt hoa thường; tần suất kí t ự số; Trang Program Tan_suat_ki_tu_chu_cai; Var st:String; A:Array['A' 'Z']of Longint; i:Longint; ch:char; Begin Write('st=');Readln(st); For i:=1 to length(st) If st[i] in['a' 'z'] then st[i]:=Upcase(st[i]); // For ch:='A' to 'Z' A[ch]:=0; For i:= to length(st) If st[i] in['A' 'Z'] then A[st[i]]:=A[st[i]]+1; For ch:='A' to 'Z' If A[ch]0 then Writeln(ch,' ->',A[ch]); Readln; End Program Tan_suat_ki_tu_so; Var st:String; A:Array['0' '9’]of Longint; i:Longint; ch:char; Begin Write('st=');Readln(st); // For ch:='0' to '9' A[ch]:=0; For i:= to length(st) If st[i] in['0' '9'] then A[st[i]]:=A[st[i]]+1; For ch:='0' to '9' If A[ch]0 then Writeln(ch,' ->',A[ch]); Readln; End Nhập chuỗi gồm nhiều từ: chuẩn hóa chuổi; đếm số từ, in từ dài nhất; in từ đối xứng chuỗi; in câu đảo có nghĩa; Chuỗi con: a) Chuỗi đối xứng dài nhất; b) Chuỗi gồm phần tử kề giống dài nhất; c) Kiểm tra chuỗi có k phần tử kề giống nhay khơng, có xóa pt kề giống giữ lại kí tự d) Chuỗi chung dài hai chuỗi; e) Kiểm tra hai chuỗi có phải hai chuỗi bạn bè hay không f) Nén giải nén chuỗi HƯỚNG DẪN GIẢI (Tương tự dãy mảng chiều) a) Chuỗi đối xứng dài nhất: - Bước 1: Chương trình kiểm tra tính đối xứng từ vị trí x đến y - Bước 2: Thủ tục in từ vị trí x đến vị trí y chuỗi st - Bước 3: Duyệt chuỗi tìm max ( dài nhất) - Bước 4: Duyệt chuỗi truy vết để in kết Program Chuoi_con_dx_max; Var st:String; i,j,max:Longint; // -Function dx(x,y:Longint):Boolean; Var i:Longint; Trang 10 while (i>0) and (j>0) begin if s1[i]=s2[j] then begin inc(x); kq:=kq+s1[i]; dec(i); dec(j); end else if l[i,j]=l[i,j-1] then dec(j) else dec(i); end; for i:=x downto write(kq[i]); end; { -} begin nhap; tim; trace; end Bài Sắp xếp xâu (Đề thi học sinh giỏi lớp 12 tỉnh Quảng Bình năm học 2012-2013) Người ta định nghĩa: Từ nhóm ký tự đứng liền Cho xâu St gồm ký tự lấy từ tập ‘a’ ‘z’ d ấu cách Xâu không 20 t ừ, từ dài không 10 ký tự Yêu cầu: Sắp xếp từ xâu ký tự theo thứ tự không gi ảm độ dài t xâu St Dữ liệu vào: Cho file văn SAPXAU.INP, có cấu trúc: - Dịng 1: Ghi xâu ký tự St (có từ) Dữ liệu ra: Ghi file văn SAPXAU.OUT, theo cấu trúc: - Dòng 1: Ghi từ xâu ký tự sau xếp Các t ghi cách dấu cách Ví dụ: SAPXAU.INP SAPXAU.OUT acb abcde abcd abc acb abc abcd abcde var a: array[0 21] of string; s:ansistring; i,n:longint; f,g:text; {===================} procedure tachtu; var x,tu:ansistring; dem:longint; begin n:=length(s); x:=s; dem:=0; while (pos(' ',x)0) and (length(x)>=0) begin i:=pos(' ',x); tu:=copy(x,1,i); inc(dem); a[dem]:=tu; delete(x,1,i); end; inc(dem); a[dem]:=x; n:=dem; end; {===================} procedure qsort(L,H: word); Trang 49 ... Function Tong(x,y:Longint):Longint; Var i:Longint; Begin Tong:=0; For i:= x to y Tong:=tong+a[i]; End; // -Thu tuc in day ket qua Procedure inkq(x,y:Longint); Var i:Longint;... Program PT_N_tong; Var n,i,j:Longint; ok:Boolean; Function tong(x,y:Longint):Longint; Var i,t:Longint; Begin t:=0; For i:=x to y t:=t+i; tong:=t; End; Procedure inkq(x,y:Longint); Var i:Longint; Begin... xd_ctc_day_con; uses crt; type mang=array[1 100] of longint; var a:mang; i,j,n,dau,max,vt,d:longint; // -Chuong trinh kiem tra tinh don dieu tang Function ddt(x,y:Longint):Boolean; Var i:Longint;