Đề thi HSG Môn Tin 11 Tỉnh Thanh Hóa – Năm học 2018 – 2019 – Kèm Code tham khảo

Đề thi HSG Môn Tin 11 Tỉnh Thanh Hóa – Năm học 2018 – 2019 – Kèm Code tham khảo

Tổng quan bài thi:


Dữ liệu vào là đúng đắn, không cần phải kiểm tra. Trong các file dữ liệu vào/ra, nếu dữ liệu trên cùng một dòng thì được cách nhau bởi ít nhất 1 dấu cách. Dấu (*) trong tên file chương trình biểu thị đuôi file tùy thuộc vào NNLT sử dụng (‘pas’ đối với NNLT PASCAL, ‘c’ đối với NNLT C,…).

Bài 1(6 điểm): Tổng số hoàn hảo.

Số hoàn hảo là số có tổng các ước số trừ nó bằng chính nó.

Yêu cầu: Tính tổng các số hoàn hảo nhỏ hơn hoặc bằng N.

Dữ liệu vào: Đọc từ tệp BAI1.INP – số nguyên N (1≤ N ≤ 105).

Dữ liệu ra: Ghi ra tệp BAI1.OUT kết quả tìm được.

Ví dụ:

BAI1.INP BAI1.OUT
30 34

        (có 2 số hoàn hảo nhỏ hơn hoặc bằng 30 là 6 và 28; 6+28=34)

Bài 2 (5 điểm):Cặp số nguyên.

Bài toán tìm ước chung lớn nhất và tìm bội chung nhỏ nhất là hai bài toán cơ bản. Nhưng hôm nay thầy giáo cho cả lớp biết L là ước chung lớn nhất và G là bội chung nhỏ nhất của 2 số nguyên dương.

Read:   File word đề thi HSG Toán 9 Quỳnh Lưu - Năm học 2022 - 2023

Yêu cầu: Tìm 2 số nguyên dương a và b có tổng nhỏ nhất sao cho ước chung lớn nhất của a và b bằng L, bội chung nhỏ nhất của a và b bằng G.

Dữ liệu vào: Đọc từ tệp BAI2.INP gồm 2 số L, G (1≤ L<G ≤ 106).

Dữ liệu ra: Ghi ra tệp BAI2.OUT là 2 số a và b tìm được (a≤b)

Ví dụ:

BAI2.INP BAI2.OUT
4  60 12  20

Bài 3(4 điểm): Đếm xâu con.

Cho xâu S bao gồm các chữ cái ‘A’..’Z’ và các chữ số ‘0’..’9’.

Yêu cầu: Đếm số xâu con trong xâu S có số lượng chữ cái nhiều hơn số lượng chữ số (xâu con của xâu S là một dãy kí tự liên tiếp trong xâu S).

Dữ liệu vào: Đọc từ tệp BAI3.INP gồm xâu S có độ dài ≤104

Dữ liệu ra: Ghi ra tệp BAI3.OUT kết quả tìm được.

Ví dụ:

BAI3.INP BAI3.OUT
AC54C 6

Bài 4(3 điểm): Giai thừa.

Cho trước số tự nhiên N.

Yêu cầu: Tìm số tự nhiên K nhỏ nhất sao cho K! có đúng N chữ số.

Dữ liệu vào: Đọc từ tệp BAI4.INP gồm một dòng chứa số tự nhiên N (1≤ N≤ 104).

Dữ liệu ra: Ghi ra tệp BAI4.OUT kết quả tìm được. Nếu không có số K nào thoả mãn yêu cầu đề ra thì ghi -1.

Ví dụ:

BAI4.INP BAI4.OUT
3 5

Bài 5 (2 điểm): Dãy con.

Cho dãy số tự nhiên A gồm N phần tử a1, a2, …., aN và số nguyên dương K. Dãy con ai, ai+1, …, aj (1≤i≤j≤N) là dãy được tạo từ các phần tử liên tiếp của dãy A, bắt đầu từ phần tử thứ i và kết thúc ở phần tử thứ j.

Read:   Phần mềm vẽ sơ đồ mạch điện chuẩn nhất cho giáo viên lý

Yêu cầu: Tìm số lượng dãy con của dãy A có ít nhất K phần tử bằng nhau.

Dữ liệu vào: Đọc từ tệp BAI5.INP

  • Dòng đầu tiên chứa 2 số nguyên dương N, K (1≤ K≤N≤4×105).
  • Dòng thứ 2 chứa N số tự nhiên a1, a2, …., aN (ai≤108)

Dữ liệu ra: Ghi ra tệp BAI5.OUT số lượng dãy con tìm được.

Ví dụ:

BAI5.INP BAI5.OUT
4  2

1  2  1  2

3

—————————– Hết —————————–

Code tham khảo Đề thi HSG Môn Tin 11 Tỉnh Thanh Hóa – Năm học 2018 – 2019

Bài 1

[rml_read_more]
































const fi='BAI1.INP';
      fo='BAI1.OUT';
var f:text;
    s,i,n:longint;
{===============================}
function shh(n:longint):boolean;
var s,i:longint;
begin
    s:=0;
    for i:=1 to trunc(sqrt(n)) do
        if n mod i=0 then
            s:=s+i+ n div i;
    if i=sqrt(n) then
    s:=s-i;
    s:=s-n;
    shh:=s=n;
end;
{===============================}
BEGIN
    assign(f,fi);
    reset(f);
    read(f,n);
    close(f);
    s:=0;
    for i:=2 to n do
        if shh(i) then
            s:=s+i;
    assign(f,fo);
    rewrite(f);
    write(f,s);
    close(f);
END.

Bài 2








































const fi='BAI2.INP';
      fo='BAI2.OUT';
var f:text;
    L,G,a,b,k1,k2,m,min:longint;
{================================}
Function UCLN(a,b:longint):longint;
begin
    while (a>0) and (b>0) do
        if a>b then
            a:=a mod b
        else
            b:=b mod a;
    UCLN:=a+b;
end;

{===============================}
begin
    assign(f,fi);
    reset(f);
    readln(f,L,G);
    close(f);
    m:=G div L;
    min:=L+G;
    for k1:=1 to trunc(sqrt(m)) do
        if m mod k1=0 then
        begin
            k2:=m div k1;
            if UCLN(k1,k2)=1 then
            begin
                a:=k1*L;
                b:=k2*L;
                if min>a+b then
                    min:=a+b;
            end;
    end;
    assign(f,fo);
    rewrite(f);
    write(f,a,' ',b);
    close(f);
end.

Bài 3







































const fi='BAI3.INP';
      fo='BAI3.OUT';
var f:text;
    s:ansistring;
    n,i,j,d:longint;
    a,b:array[0..10000] 






 of longint;
begin
    assign(f,fi);
    reset(f);
    readln(f,s);
    close(f);
    n:=length(s);
    a[0] 

:=0;
    for i:=1 to n do
        if (s[i] >='A') and (s[i] 
<='Z') then
            a[i] :=a[i-1] 

+1
        else
            a[i] :=a[i-1] 
;
    b[0] 

:=0;
    for i:=1 to n do
        if (s[i] >='0') and (s[i] 
<='9') then
            b[i] :=b[i-1] 

+1
        else
            b[i] :=b[i-1] 



;
    d:=0;
    for i:=1 to n do
        for j:=i to n do
            if a[j] -a[i-1] >b[j] -b[i-1] 





 then
                inc(d);
    assign(f,fo);
    rewrite(f);
    write(f,d);
    close(f);
end.

Bài 4

































const fi='BAI4.INP';
      fo='BAI4.OUT';
var f:text;
    n,k,d:longint;
    x:real;
{=============================}
BEGIN
    assign(f,fi);
    reset(f);
    readln(f,n);
    close(f);
    k:=1;
    d:=1;
    x:=1;
    while d<n do
    begin
         inc(k);
         x:=x*k;
         while x>=10 do
         begin
             x:=x/10;
             inc(d);
         end;
    end;
    assign(f,fo);
    rewrite(f);
    if d=n then
        write(f,k)
    else
        write(f,-1);
    close(f);
END.

Bài 5












































const fi='BAI5.INP';
      fo='BAI5.OUT';
var f:text;
    a:array[1..400000] 
 of longint;
    d:array[1..100000000] 









 of longint;
    k,n,i,j,sl:int64;
begin
    assign(f,fi);
    reset(f);
    readln(f,n,k);
    i:=0;
    while i<n do
    begin
        inc(i);
        read(f,a[i] 





);
    end;
    close(f);
    i:=1;
    j:=1;
    sl:=0;
    inc(d[a[1] 

]);
    while i<=n-k+1 do
        if d[a[j] 


]=k then
        begin
            sl:=sl+n-j+1;
            dec(d[a[i] 






]);
            inc(i);
        end
        else
            if j<n then
            begin
                inc(j);
                inc(d[a[j] 







]);
            end
            else
                break;
    assign(f,fo);
    rewrite(f);
    write(f,sl);
    close(f);
end.

 

Read:   Đề thi HSG toán 9 cấp Huyện của tỉnh An Giang – Năm học 2019 – 2020
Hình đại diện của người dùng

admin

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *