Thứ Bảy, 11 tháng 3, 2017

[Hướng dẫn giải] Đề thi học sinh giỏi lớp 10, môn Tin (bảng B), tỉnh Đồng Nai năm 2015 2016

Tham khảo đề bài tại đây

Bài trắc nghiệm


Bài 3: BINARY

Ý tưởng

Mô phỏng lại cách đổi từ hệ thập phân sang nhị phân, ta cứ chia n cho 2 khi n > 0, lưu các số dư vào mảng p[].
Xuất ngược mảng p[] để được số nhị phân cần tìm

Chương trình

const
fin='binary.inp';
fon='binary.out';
var
i,j:longint;
m,n:qword;
p:array[1..100000000] of byte;
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
readln(n);i:=1;
while n>0 do
     begin
     p[i]:=n mod 2;
     n:=n div 2;
     inc(i);
     end;
for j:=i-1 downto 1 do write(p[j]);
close(input);close(output);
end.

Bài 4 DIGIT

Ý tưởng

Ta thực hiện 2 nhiệm vụ:
·        Viết hàm taoxau(n:longint):ansistring; để tạo ra xâu dạng 123….n
            Duyệt i từ 1 đến n, dùng thủ tục str(i, si) để chuyển số i thành xâu i và nối vào xâu kết quả t.
·        Viết thủ tục xoa; mô phỏng việc xóa:
Có nhiều cách thực hiện công việc này, ví dụ dùng thủ tục delete để xóa trực tiếp xâu s (khá rườm rà), … Ở đây, ta sẽ đi tìm xâu s1 gồm các kí tự còn lại của s sau khi xóa rồi gán trở lại cho s. Việc tìm xâu s1, ta bắt đầu từ vị trí i (lúc là 1, lúc là 2) và dùng biến j để nhảy cóc 2 vị trí 1 lần.

Chương trình

const
   fin='digit.inp';fon='digit.out';
 
var s,si,s1,t:ansistring; i,n,j:longint;
 
function taoxau(n:longint):ansistring;
begin
t:='';
for i:=1 to n do
   begin
   str(i,si);
   t:=t+si;
   end;
exit(t);
end;
 
procedure xoa;
begin
i:=1;
while length(s)>1 do
   begin
   s1:='';j:=i;
   while j<=length(s) do
      begin
      s1:=s1+s[j];
      inc(j,2);
      end;
   i:=3-i;
   s:=s1;
   end;
write(s);
end;
 
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
readln(n);
s:=taoxau(n);
xoa;
close(input);close(output);
end.

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.