lời giải LATGACH spoj – Lát gạch
Nguồn đề bài http://vn.spoj.com/problems/LATGACH/ 1. Đề bài LATGACH spoj Cho một hình chữ nhật kích thước 2xN (1<=N<=100). Hãy đếm số cách lát các viên gạch nhỏ kích thước 1×2 và 2×1 vào hình trên sao cho không có phần nào của các viên gạch nhỏ thừa ra ngoài, ...
Nguồn đề bài http://vn.spoj.com/problems/LATGACH/
1. Đề bài LATGACH spoj
Cho một hình chữ nhật kích thước 2xN (1<=N<=100). Hãy đếm số cách lát các viên gạch nhỏ kích thước 1×2 và 2×1 vào hình trên sao cho không có phần nào của các viên gạch nhỏ thừa ra ngoài, cũng không có vùng diện tích nào của hình chữ nhật không được lát.
Input
Gồm nhiều test, dòng đầu ghi số lượng test T ( T<=100 ).
T dòng sau mỗi dòng ghi một số N.
Output
Ghi ra T dòng là số cách lát tương ứng.
Example
Input:
3
1
2
3
Output:
1
2
3
2. Hướng dẫn LATGACH spoj
thực chất đây là bây toán Fibonacci. F[i]:=F[i-1]+F[i-2]. việc còn lại là xử lí số lớn.
3. Code tham khảo LATGACH spoj
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | const fi='; var f:text; T:byte; A:array[0..100] of ansistring; function cong(a,b:ansistring):ansistring; var c:ansistring; i,du,carry:word; begin while length(a)<length(b) do a:='0'+a; while length(b)<length(a) do b:='0'+b; du:=0; c:='; for i:=length(a) downto 1 do begin carry:=ord(a[i])+ord(b[i])-48*2+du; if carry>9 then begin du:=1; carry:=carry-10; end else du:=0; c:=chr(carry+48) + c; end; if du=1 then c:='1'+c; exit(c); end; procedure fibo; var i:byte; begin a[0]:='1'; a[1]:='1'; for i:=2 to 100 do a[i]:=cong(a[i-1],a[i-2]); end; begin assign(f,fi); reset(f); readln(f,t); fibo; while not eof(f) do begin readln(f,t); writeln(a[t]); end; close(f); end. |