Tổng hợp đề thi HSG môn Tin học THPT có đáp án

33 20 0
Tổng hợp đề thi HSG môn Tin học THPT có đáp án

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐỀ Tên File chương trình File Input File Output Thời gian Điểm Bài DEM.* DEM.inp DEM.out 1s / test Bài TACH.* TACH.inp TACH.out 1s / test Bài ATM.* ATM.inp ATM.out 1s / test Chú ý: Thí sinh thay * tên chương trình PAS CPP tùy theo ngơn ngữ lập trình mà thí sinh sử dụng PASCAL C++ Bài 1: Đếm số bên phải Cho số nguyên n Hãy đếm xem kết số n! (n giai thừa) có chữ số liên tiếp tính từ hàng đơn vị (hay số liên tiếp bên phải) Dữ liệu vào - Một dòng chứa số nguyên n (1 ≤ n ≤ 1.000) Dữ liệu xuất: - Một dòng ghi số lượng chữ số liên tiếp tính từ hàng đơn vị n! Ví dụ Input Output Giải thích 8! = 5040 Bài 2: Tách chuỗi đối xứng Chuỗi đối xứng (palindrome) chuỗi mà ta đọc từ trái sang phải hay từ phải sang trái giống Ví dụ chuỗi 'abcba' chuỗi đối xứng Một ký tự gọi chuỗi đối xứng Một chuỗi S ln ghép từ chuỗi đối xứng Ví dụ chuỗi 'bobseesanna' có số cách ghép sau: 1) 'b' + 'o' + 'b' + 'sees' + 'a' + 'n' + 'n' + 'a' 2) 'bob' + 'sees' + 'anna' 3) 'bob' + 's' + 'ee' + 's' + 'anna' Tổng quát S = P1 + P2 + + Pk với P1, P2, , Pk chuỗi đối xứng Bạn tìm cách biểu diễn S cho k bé Trong ví dụ trên, k = (cách ghép số 2) Dữ liệu vào: - Dòng thứ số nguyên n (1 ≤ n ≤ 2.000) biểu thị chiều dài chuỗi S - Dòng thứ hai chuỗi S gồm n ký tự chữ la tinh thường từ a đến z Dữ liệu ra: - Dòng thứ số nguyên k - Trong k dòng tiếp theo, dòng thứ i chuỗi đối xứng P i Nếu có nhiều cách biểu diễn, cần in cách Ví dụ Input 11 bobseesanna output bob sees anna Bài 3: Máy rút tiền ATM Vinh làm việc cho công ty sản xuất máy ATM Chức máy ATM rút tiền mặt Khi khách hàng muốn rút M đồng, máy ATM nhả m tờ tiền mà có tổng W đồng Trong máy ATM hệ tiếp theo, Vinh xây dựng thuật toán để tìm W (số lượng tờ tiền) Giả sử máy ATM có N loại tiền: 1, 2, 3, , n; loại có mệnh giá tương ứng v[1] < v[2] < v[3] < < v[n] Cho biết cách tốn cần số lượng tờ tiền cho số tiền cần toán W Bạn giúp Vinh viết chương trình thực yêu cầu Biết số tiền ATM lớn số tiền cần rút Dữ liệu vào: Gồm dòng Dòng 1: Chứa số nguyên dương N N số nguyên loại tiền đơn vị tính đồng v[1]… v[N] Dịng 2: Chứa M số tiền khách hàng muốn rút tính đồng Dữ liệu xuất: Gồm nhiều dòng Dòng 1: Ghi số W số lượng tờ tiền Dịng trở đi: Gồm số W1 W2 W1 số tờ tiền tương ứng mệnh giá W2 Nếu khơng có cách rút tiền ghi file dịng chữ “nhap lai so tien” Ví dụ Input Output 10 20 50 100 450 100 50 Bài 1: Đếm số bên phải Chương trình mẫu var a,d,i,e:longint; f1,f2 :text; begin assign(f1,’dem.inp’); reset(f1); assign(f2,’dem.out’);rewrite(f2); readln(f1,a); d:= 0; for i:=1 to a begin e:=i; while e mod = begin inc(d); e := e div 5; end; end; writeln(f2,d); close(f1); close(f2); end Đáp án: Bài 2: Tách chuỗi đối xứng var i,j,n,m,t:longint; a:array[0 100000] of char; f:array[0 10000,0 10000] of longint; k,d,kt:array[-10000 10000] of longint; //f1, f2:text; procedure motep; begin assign(f1,'TACH.inp'); reset(f1); readln(f1,n); for i:=1 to n read(f1,a[i]); assign(f2,'TACH.out'); rewrite(f2); end; procedure xuli; begin for i:=n downto begin f[i,i]:=1; if in then if a[i]=a[i+1] then f[i,i+1]:=1; for j:=i+2 to n if (a[i]=a[j]) and (f[i+1,j-1]=1) then f[i,j]:=1; end; for i:=1 to n+1 d[i]:=n*2; d[0]:=0; for i:=1 to n for j:=1 to n begin if f[i,j]=1 then if d[j]>=d[i-1]+1 then begin d[j]:=d[i-1]+1; kt[j]:=i; end; end; writeln(d[n]); t:=n; while t>0 begin k[kt[t]-1]:=1; t:=kt[t]-1; end; for i:=1 to n begin write(a[i]); if k[i]=1 then writeln; end; close(f1); close(f2); end; begin motep; xuli; end Bài 3: Rút tiền ATM *Đặt lại tốn: Có N loại tiền: 1, 2, 3, , n; loại có mệnh giá tương ứng v[1] < v[2] < v[3] < < v[n] Cho biết cách tốn cần số lượng tờ tiền cho số tiền cần toán M Cách giải Gọi F[i, j] số lượng tờ tiền cần trả (cách trả cần tờ tiền nhất) có sử dụng i loại tờ tiền (1, 2, 3, , i) cho số tiền j Giá trị cuối cùng: F[N, M] kết cách toán; dùng N loại tờ tiền (1, 2, 3, , N) cho số tiền M *Công thức truy hồi: với việc chọn tối ưu số loại tiền 1, 2, 3, , i để toán số tiền j, F[i, j] có khả năng: 1) F[i, j] = F[i-1, j]; Không dùng loại tiền i để toán số tiền j 2) F[i, j] = + F[i, j-v[i]]; Có dùng loại tiền i để toán số tiền j (đk: j >= v[i]) F[i, j] cách trả cần tờ tiền nhất, giá trị thu *Cơ sở quy hoạch động: F[0, j] = vô cùng; (1

Ngày đăng: 08/04/2022, 13:32

Từ khóa liên quan

Mục lục

  • Ví dụ

  • Input

  • Output

  • 8

  • 1

  • Ví dụ

  • Input

  • output

  • 3 bob sees anna

  • Ví dụ

  • Input

  • Output

  • 450

  • 5

  • 4 100

  • 1 50

  • Bài 2: Tách chuỗi đối xứng

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

Tài liệu liên quan