de thi tin hoc thanh pho tam diep

2 21 1
de thi tin hoc thanh pho tam diep

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

Thông tin tài liệu

Hãy xác định xem dãy đã cho có phải dãy tăng dần hay không, tính số cặp đôi xung khắc và tìm một cặp đôi lý tưởng nếu có trong dãy đã cho.[r]

(1)Bài II(10 điểm): DÃY SỐ Cho số nguyên dương S và dãy số gồm N số nguyên dương F 1, F2, , FN Dãy số đã cho gọi là dãy tăng dần nếu: Fi Fi+1 ∀ i { 1,2, , n −1 } ( hay F1 F2 F3 FN ) Chúng ta gọi hai số hạng Fi1 và Fi2 dãy đã cho (với i1 i2; i1,i2 { 1,2, , n } ): - Là “cặp đôi xung khắc” Fi1 + Fi2 = S - Là “cặp đôi lý tưởng” chúng cùng có ba chữ số, các chữ số số hạng này giống hệt số hạng khác thứ tự xuất - ví dụ 123 và 132 hay 121 và 211 là các cặp đôi lý tưởng còn 121 và 122 hay 457 và 457 thì không phải Yêu cầu: Cho biết S và dãy số F1, F2, , FN Hãy xác định xem dãy đã cho có phải dãy tăng dần hay không, tính số cặp đôi xung khắc và tìm cặp đôi lý tưởng (nếu có) dãy đã cho Dữ liệu vào: Dữ liệu vào bài toán cho tệp tin DAYSO.INP với cấu trúc sau: - Dòng đầu tiên gồm hai số N và S (N 50000, S <1000) - Dòng thứ i N dòng chứa số là số Fi dãy (Fi < 500) Dữ liệu ra: Kết ghi trên màn hình (hoặc ghi file DAYSO.OUT)bốn dòng: - Dòng đầu ghi ba số N, S và FN - Dòng thứ hai ghi CO dãy đã cho là dãy tăng dần, ghi KHONG ngược lại - Dòng thứ ba ghi số là số cặp đôi xung khắc dãy đã cho - Dòng thứ tư ghi hai số là cặp đôi lý tưởng tìm dãy đã cho, không có cặp đôi lý tưởng nào thì ghi hai số Ví dụ: DAYSO.INP Kết trên màn hình (hoặc file DAYSO.OUT) 55 555 CO 2 00 10 111 10 111 101 110 KHONG 110 110 101 5 10 10 10 101 Hạn chế kỹ thuật: - Ghi tên file bài làm là DAYSO.PAS - Dữ liệu vào là chính xác không cần kiểm tra - Có khoảng 30% số test có thể nhập liệu vào từ bàn phím - Có khoảng 60% số test có N < 1000 Bài - DAYSO.PAS} uses crt; const fi = 'dayso.inp'; max = 500; var a:array[1 500] of word; so:array[1 4,0 9,0 9] of boolean; f:text; tangdan:boolean; n,s,fn,socu:word; Tongxk:longint; procedure nhap; var i,k:word; begin fillchar(a,sizeof(a),0); assign(f,fi); reset(f); socu:=0; tangdan:=true; readln(f,n,s); for i:= to n begin readln(f,k); inc(a[k]); if k<socu then tangdan:=false; socu:=k; if k>100 then (2) so[k div 100,(k div 10)mod 10,k mod 10]:=true; end; fn:=k; close(f); end; procedure demxungkhac; var i:word; begin tongxk:=0; for i:= to ((s-1)div 2) tongxk:=tongxk+a[i]*a[s-i]; if not odd(s) then begin i:=s div 2; tongxk:=tongxk+(a[i]*(a[i]-1) div 2); end; end; procedure timlytuong; var i,j,k:byte; begin for i:=1 to for j:=0 to for k:=0 to if so[i,j,k] then begin if (j<>k)and so[i,k,j] then begin write(i,j,k,' ',i,k,j); exit; end; if (k<>0)and(i<>k)and so[k,j,i] then begin write(i,j,k,' ',k,j,i); exit; end; if (j<>0)and(i<>j)and so[j,i,k] then begin write(i,j,k,' ',j,i,k); exit; end; if (k<>0)and((i<>j)or(i<>k)or(k<>j))and so[k,i,j] then begin write(i,j,k,' ',k,i,j); exit; end; if (j<>0)and((i<>j)or(i<>k)or(k<>j))and so[j,k,i] then begin write(i,j,k,' ',k,j,i); exit; end; end; writeln(0,' ',0); end; procedure inkq; begin clrscr; writeln(n,' ',s,' ',fn); if tangdan then writeln('CO') else writeln('KHONG'); demxungkhac; writeln(tongxk); timlytuong; end; begin nhap; inkq; readln; end (3)

Ngày đăng: 28/09/2021, 13:05

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

Tài liệu liên quan