de thi thi lap trinh

5 738 9
de thi thi lap trinh

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

Thông tin tài liệu

Bài 1: Phân đoạn Tên file chương trình: SEGPAR.PAS Cho dãy số nguyên a 1 , a 2 …,a n và số nguyên dương k. Ta gọi k-phân đoạn của dãy số đã cho là cách chia dãy số đã cho ra thành k đoạn, mỗi đoạn là một dãy con gồm các phần tử liên tiếp của dãy. Chính xác hơn, một k-phân đoạn được xác đònh bởi dãy chỉ số 1 ≤ n 1 < n 2 < … < n k = n. Đoạn thứ i là dãy con iii nnn aaa , .,, 21 11 ++ −− , i = 1,2,…,k. Ở đây ta quy ước n 0 = 0. Yêu cầu: Hãy xác đònh số M nhỏ nhất để tồn tại k-phân đoạn sao cho tổng các phần tử trong mỗi đoạn đều không vượt quá M. Dữ liệu: Vào từ file văn bản SEGPAR.INP. - Dòng đầu tiên chứa hai số nguyên n và k (1 ≤ k ≤ n ≤ 15000); - Dòng thứ i trong số n dòng tiếp theo chứa số nguyên a i (|a i | ≤ 30000), i =1, 2, …,n. Các số cạnh nhau trên một dòng trong file dữ liệu cách nhau ít nhât một dấu cách. Kết quả: Ghi ra file SEGPAR.OUT một số nguyên duy nhất là giá trò trò M tìm được. Ví dụ: SEGPAR.INP 9 4 1 1 1 3 2 2 1 3 1 SEGPAR.OUT 5 Bài 2: Mã nhân viên Tên file chương trình: SEGPAR.PAS Tập đoàn Công nghệ Amser nổi tiếng hiện có N nhân viên. Dưới thời tổng giám đốc cũ, Huluxima gán cho mỗi nhân viên i (i = 1, 2, , N) một mã IP là một số nguyên dương A i (tất nhiên 2 nhân viên khác nhau sẽ có số IP khác nhau). Hiện nay, Tổng giám đốc mới lên nắm quyền là Bata rất chú trọng tới sự ngăn nắp và qui củ nên ông muốn ngay cả các số IP của nhân viên cũng phải được cân nhắc kỹ càng. Khi có thêm một nhân viên mới, ông ta muốn biết số IP nhỏ nhất còn có thể gán cho nhân viên đó. Yêu cầu: Cho N mã IP của các nhân viên trong tập đoàn, hãy tìm mã IP nhỏ nhất chưa xuất hiện cho tập N mã đã cho. Dữ liệu: Trong file văn bản IP.INP gồm - Dòng đầu là N (0 ≤ N ≤ 10 8 ). - N dòng tiếp theo, dòng thứ i ghi số A i (i = 1 N, 1 ≤ A i ≤ 10 9 ). Kết quả: Ra file văn bản IP.OUT gồm một số duy nhất là mã IP tìm được. Ví dụ: IP.INP IP.OUT 3 3 1 4 2 {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+} {$M 16384,0,655360} program Ma_Ip; const fi =’ip.inp’; fo =’ip.out’; type mang =array[0 31249] of word; var ip,n :longint; a :mang; procedure turnon(var x:word;y:byte); begin x:=x or (1 shl y); end; function getbit(x:word;y:byte):byte; begin getbit:=(x shr y) and 1; end; procedure main; var s,i,min,max :longint; kx,j :byte; f :text; begin for kx:=0 to 200 do begin fillchar(a,sizeof(a),0); turnon(a[0],0); min:=kx*500000; max:=(kx+1)*500000; assign(f,fi);reset(f); readln(f,n); for i:=1 to n do begin read(f,s); if (s>=min) and (s begin s:=s-min; turnon(a[s shr 4],s and 15); end; end; close(f); assign(f,fo);rewrite(f); for i:=0 to 31249 do if a[i]<>65535 then for j:=0 to 15 do if getbit(a[i],j)=0 then begin ip:=min+i*16+j; writeln(f,ip); close(f);halt; end; end; close(f); end; begin main; end. Bài 3: Dãy tam giác bao nhau Tên file chương trình: TAMGIAC.PAS Cho n tam giác trên mặt phẳng. Hãy tìm dãy các tam giác bao nhau nhiều nhất biết rằng tam giác i bao tam giác j nếu 3 đỉnh của tam giác j đều nằm trong hoặc nằm trên cạnh của tam giác i. Input: File Tamgiac.inp - Dòng thứ nhất ghi số N (1 < N < 10000) - N dòng tiếp theo dòng thứ i ghi 6 số nguyên là toạ độ 3 đỉnh của tam giác i. Output: File Tamgiac.out Gồm một dòng chứa các số hiệu tam giác bao nhau. Ví dụ: Tamgiac.inp Tamgiac.out 4 2 3 0 0 0 1 1 0 1 1 1 2 2 1 0 0 0 3 3 0 5 0 7 0 0 3 Program tamgiacbaonhau; const fi='tamgiac.inp'; fo='tamgiac.out'; maxn=100; epsilon=0.000001; type diem=record x,y:real; end; var a:array[1 maxn]of word; tamgiac:array[1 6]of diem; fx:array[1 maxn] of integer; trace:array[1 maxn] of integer; i,j,luu:word; s,ss,sss:real; n:word; Procedure dientich; var i:integer; begin S:=0; for i:=1 to 3 do S:=S+(tamgiac[i].x-tamgiac[i+1].x)*(tamgiac[i].y+tamgiac[i+1].y); S:=abs(S/2); end; Procedure input; var f:text;k,j:integer; begin assign(f,fi); reset(f); readln(f,n); a[1]:=1; for i:=1 to 3 do read(f,tamgiac[i].x,tamgiac[i].y); tamgiac[5]:=tamgiac[1]; readln(f); for k:=2 to n do begin for i:=1 to 3 do read(f,tamgiac[i].x,tamgiac[i].y); tamgiac[4]:=tamgiac[1]; dientich; ss:=s; tamgiac[4]:=tamgiac[5];sss:=0; for j:=1 to 3 do begin tamgiac[6]:=tamgiac[j]; tamgiac[j]:=tamgiac[5]; dientich;sss:=sss+s; tamgiac[j]:=tamgiac[6]; tamgiac[4]:=tamgiac[1]; end; if abs(sss-ss)<epsilon then a[k]:=a[k-1]+1 else a[k]:=1; end; close(f); end; procedure Init; begin fillchar(fx,sizeof(fx),1); fillchar(trace,sizeof(trace),0); end; procedure Solve; begin for i:=2 to N do begin for j:=i-1 downto 1 do if (A[j]<A[i]) and (fx[i]<fx[j]+1) then begin fx[i]:=fx[j]+1; trace[i]:=j; end; end; end; procedure WriteH(i:Word); begin if i >0 then begin WriteH(trace[i]); write(i,' '); end; end; procedure Print; begin assign(output,fo); rewrite(output); Luu:=N; for i:=N-1 downto 1 do If fx[i]>fx[Luu] then Luu:=i; WriteH(Luu); close(output); end; begin Input; Init; Solve; Print; end.

Ngày đăng: 04/08/2013, 01:27

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan