1. Trang chủ
  2. » Địa lí lớp 10

De thi Toan Tin hoc trong nha truong Bai 74

4 5 0

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

THÔNG TIN TÀI LIỆU

Bạn có thể cải tiến chương trình này bằng cách kiểm tra các điều kiện ngay trong quá trình duyệt để giảm bớt thời gian duyệt.. Cách làm khác dùng thuật toán chia kẹo chạy rất nhanh với N[r]

(1)

Bài 74/2001 - Hai hàng số kỳ ảo (Dành cho học sinh THCS PTTH)

Tổng số từ đến 2n: + + … + 2n = (2n*(2n+1))/2 = n*(2n+1)

Do đó, để hai hàng có tổng tổng hàng phải là: (n*(2n+1))/2, n phải số chẵn tồn hai hàng số kì ảo

Tổng n cột nên tổng cột là: 2n+1

ứng với số A[i] (A[i] = 1, 2, …, 2n) tồn số B[i] = 2n -(A[i] -1) cho: A[i] + B[i] = 2n + 1;

Tồn chương trình lời giải: Program bai74;

uses crt; var n:byte;

a:array[1 100]of 1; th:array[0 50]of byte; ok:boolean;

s:integer; Procedure xet; var i,j,tong:integer; duoc:boolean; Begin

tong:=0;

for j:=1 to n tong:=tong+th[j]; if tong=s div then

begin

duoc:=true; for j:=1 to n-1 for i:=j+1 to n

if th[j]+th[i]=(s div n) then duoc:=false; if duoc then

begin

for i:=1 to n write(th[i]:3); writeln;

for i:=1 to n write(((s div n)-th[i]):3); ok:=true;

end; end; end;

Procedure try(i:byte); var j:byte;

Begin

if i>n then xet else if not ok then

for j:=th[i-1]+1 to 2*n begin

(2)

end; End;

Procedure xuli; var i:byte; Begin th[0]:=0; ok:=false; s:=n*(2*n)+1; try(1);

if ok=false then write('Khong the sap xep'); End;

BEGIN clrscr;

write('Nhap n:');readln(n);

if n mod =1 then writeln('Khong the sap xep') else xuli;

readln; END

(Lời giải bạn Hoàng Phương Nhi - PTTH chuyên Lý Tự Trọng - Cần Thơ)

Nhận xét: Cách làm bạn Hoàng Phương Nhi - PTTH chuyên Lý Tự Trọng - Cần Thơ dùng thuật toán duyệt nên chạy khơng lớn Với N = 20 chương trình chạy lâu, N lớn khơng thể kết Bạn cải tiến chương trình cách kiểm tra điều kiện trình duyệt để giảm bớt thời gian duyệt

Cách làm khác dùng thuật toán chia kẹo chạy nhanh với N<35 Tổng số từ đến 2n: + + + 2n = (2n*(2n+1))/2 = n*(2n+1)

Do đó, để hai hàng có tổng tổng hàng phải là: (n*(2n+1))/2, n phải số chẵn tồn hai hàng số kì ảo

Tổng n cột nên tổng cột là: 2n+1

ứng với số A[i] (A[i] = 1, 2, , 2n) tồn số B[i] = 2n -(A[i] -1) cho: A[i] + B[i] = 2n +

{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+} {$M 16384,0,655360}

uses crt;

const max =35; fi = 'bai74.inp'; fo = 'bai74.out';

var d : array[0 max*(2*max+1) div 2] of byte; tr : array[1 max,0 max*(2*max+1) div 2]of byte; kq : array[1 max]of integer;

(3)

procedure docf; var f :text; begin ok:=false; assign(f,fi); reset(f); read(f,n); close(f); end;

procedure lam; var i,j :integer; begin

sum:=n*(2*n+1) div 2; fillchar(d,sizeof(d),0); fillchar(tr,sizeof(tr),0); d[0]:=1;

for i:=1 to n begin

for j:=sum-i downto if d[j]=1 then

begin d[j+i]:=2; tr[i,j+i]:=1; end;

for j:=sum-(2*n+1-i) downto if d[j]=1 then

begin

d[j+2*n+1-i]:=2; tr[i,j+2*n+1-i]:=2; end;

for j:=0 to sum if d[j]>0 then dec(d[j]); end;

ok:=(d[sum]=1); end;

procedure ghif; var f :text; i,j :integer; begin

assign(f,fo); rewrite(f);

(4)

begin

i:=sum;j:=n; while i>0 begin

if tr[j,i]=1 then kq[j]:=j else kq[j]:=2*n+1-j; i:=i-kq[j];

dec(j); end;

for j:=1 to n write(f,kq[j]:6); writeln(f);

for j:=1 to n write(f,(2*n+1-kq[j]):6); end;

close(f); end; BEGIN docf;

if n mod 2=0 then lam; ghif;

Ngày đăng: 05/03/2021, 13:26

Xem thêm:

TỪ KHÓA LIÊN QUAN

w