Đề thi Tin học trẻ tỉnh Yên Bái năm 2023 (có đáp án)

Đề thi Tin học trẻ

Đề thi Tin học trẻ tỉnh Yên Bái năm 2023 – Bảng B (khối THCS)

Câu 1. Đua Robot

Có hai robot đang chuyển động thẳng đều, cùng chiều trên cùng một con đường, robot thứ nhất đang ở vị trí s1 di chuyển với vận tốc là v1 m/s, robot thứ hai đang ở vị trí s2 di chuyển với vận tốc v2 m/s. Hỏi sau bao nhiêu lâu thì hai robot gặp nhau?

Dữ liệu vào từ file văn bản BAI1.INP:

– Dòng đầu tiên gồm số nguyên dương s1 mô tả vị trí của robot thứ nhất;

– Dòng thứ hai gồm số nguyên dương v1 mô tả vận tốc của robot thứ nhất;

– Dòng thứ ba gồm số nguyên dương s2 mô tả vị trí của robot thứ hai;

– Dòng thứ tư gồm số nguyên dương v2 mô tả vận tốc của robot thứ hai;

Các đơn vị khoảng cách được tính bằng mét, thời gian được tính bằng giây và s1 ≠ s2; s1, s2, v1, v2 ≤ 109.

Kết quả ghi ra file BAI1.OUT:

In ra một số nguyên là phần nguyên của kết quả – thời gian mà hai robot gặp nhau. Nếu hai robot không thể gặp nhau thì in ra -1.

Ví dụ:

BAI1.INP BAI1.OUT
2

5

7

3

2

Câu 2. Chuỗi ARN

Trong phòng thí nghiệm, các nhà khoa học đang nghiên cứu về gen của một chuỗi ARN đặc biệt được mã hóa bằng một xâu s gồm các ký tự A,U,G,X. Họ muốn cắt từ chuỗi ARN đó một mạch (được mã hóa bằng xâu x) cho trước.

Yêu cầu: Từ chuỗi ARN có thể cắt được tối đa bao nhiêu đoạn mạch x.

Dữ liệu vào từ file văn bản BAI2.INP

– Dòng đầu tiên gồm một xâu ký tự s mô tả chuỗi ARN.

– Dòng thứ hai gồm xâu ký tự x mô tả đoạn mạch cần cắt ra.

Các xâu chỉ gồm các ký tự A,U,G,X và độ dài các xâu không quá 103 ký tự.

Kết quả ghi ra file văn bản BAI2.OUT

Một số nguyên duy nhất là kết quả của bài toán.

Ví dụ:

BAI2.INP BAI2.OUT
AUAUGXXAUGXGX

AUGX

2
AAAA

AAA

1
AGAX

U

0

Câu 3. Thử tài nhanh trí

Ở đất nước Ba Lan xinh đẹp có nàng công chúa tới tuổi kén chồng. Nhà vua muốn tìm ra một chàng rể thông minh kiệt xuất xứng với công chúa nên đã đề ra cuộc thi “Thử tài nhanh trí”. Nội dung của cuộc thi là chàng hoàng tử nào nhanh chóng đưa ra kết quả của nhà vua trong thời gian tối đa 1s sẽ được gặp mặt công chúa. Là một nhà lập trình tài ba, bạn hãy giúp các chàng hoàng tử nhé.

Cho số tự nhiên n (n ≥ 2), ta có thể phân tích n thành tích các thừa số nguyên tố với dạng n = p1^x1 * p2 ^x2 * … *pk^xk. Trong đó, p1 < p2 < …. < pk là các số nguyên tố và x1, x2, … xk > 0. Gọi s là tổng các số mũ x1 có giá trị lẻ.

Chú ý là s + p = x1 + x2 + … + xk.

Yêu cầu: Hãy đưa ra giá trị s và p

Dữ liệu: Cho file văn bản BAI3.INP gồm một số tự nhiên n (n ≥ 2).

Kết quả: Ghi ra file văn bản BAI3.OUT gồm 2 dòng:

– Dòng thứ nhất ghi giá trị của s

– Dòng thứ hai ghi giá trị của p

Ví dụ:

BAI3.INP BAI3.OUT
20 2

1

420 2

3

3 0

1

4 2

0

Đáp án Câu 1. Đua Robot

Cài đặt Câu 1 bằng ngôn ngữ lập trình Python

# Đọc dữ liệu từ file BAI1.INP
with open("BAI1.INP", "r") as f:
    s1 = int(f.readline())
    v1 = int(f.readline())
    s2 = int(f.readline())
    v2 = int(f.readline())

# Tính khoảng cách giữa hai robot
d = abs(s2 - s1)

# Kiểm tra nếu hai robot di chuyển cùng vận tốc
if v1 == v2:
    result = -1
else:
    # Tính thời gian mà hai robot gặp nhau
    t = d / abs(v1 - v2)
    result = int(t)  # Lưu phần nguyên của t

# Ghi kết quả vào file BAI1.OUT
with open("BAI1.OUT", "w") as out_file:
    out_file.write(str(result))

Cài đặt Câu 1 bằng ngôn ngữ lập trình C++

#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int main() {
    freopen("BAI1.INP", "r", stdin);
    freopen("BAI1.OUT", "w", stdout);
    int s1, v1, s2, v2;
    cin >> s1 >> v1 >> s2 >> v2;

    // Tính khoảng cách giữa hai robot
    int d = abs(s2 - s1);

    // Kiểm tra nếu hai robot di chuyển cùng vận tốc
    if (v1 == v2) {
        cout << -1 << endl;
    } else {
        // Tính thời gian mà hai robot gặp nhau
        double t = static_cast<double>(d) / abs(v1 - v2);
        cout << static_cast<int>(t) << endl;  // In ra phần nguyên của t
    }   

    return 0;
}

Đáp án Câu 2. Chuỗi ARN

Cài đặt Câu 2 bằng ngôn ngữ lập trình Python

# Đọc dữ liệu từ file BAI2.INP
with open("BAI2.INP", "r") as f:
    s = f.readline().strip()  # Chuỗi ARN
    x = f.readline().strip()  # Đoạn mạch cần cắt ra

# Đếm số lần xuất hiện của đoạn mạch x trong chuỗi ARN
count = s.count(x)

# In ra kết quả
with open("BAI2.OUT", "w") as f_out:
    f_out.write(str(count))

Cài đặt Câu 2 bằng ngôn ngữ lập trình C++

#include <iostream>
#include <string>
using namespace std;

int main() {
    freopen("BAI2.INP", "r", stdin);  // Đọc từ file BAI2.INP
    freopen("BAI2.OUT", "w", stdout);  // Ghi vào file BAI2.OUT

    // Đọc dữ liệu từ stdin (đã được redirect từ file BAI2.INP)
    string s, x;
    cin >> s >> x;

    // Đếm số lần xuất hiện của đoạn mạch x trong chuỗi ARN
    int count = 0;
    size_t pos = s.find(x);
    while (pos != string::npos) {
        count++;
        pos = s.find(x, pos + 1);
    }

    // Ghi kết quả vào stdout (đã được redirect vào file BAI2.OUT)
    cout << count << endl;

    return 0;
}

Đáp án Câu 3. Thử tài nhanh trí

Đây là một bài toán phân tích số thành tích các thừa số nguyên tố và tính tổng các số mũ x1 có giá trị lẻ. Cuối cùng, ta cần tính giá trị của s và p dựa trên các thông số đã cho.

Để giải quyết bài toán này, ta có thể sử dụng thuật toán phân tích số thành tích các thừa số nguyên tố, sau đó tính toán giá trị của s và p bằng cách duyệt qua các thừa số nguyên tố và số mũ tương ứng của chúng.

Cài đặt Câu 3 bằng ngôn ngữ lập trình Python

def prime_factors(n):
    factors = []
    while n % 2 == 0:
        factors.append(2)
        n //= 2
    for i in range(3, int(n**0.5) + 1, 2):
        while n % i == 0:
            factors.append(i)
            n //= i
    if n > 2:
        factors.append(n)
    return factors

# Đọc số tự nhiên n từ file BAI3.INP
with open("BAI3.INP", "r") as f:
    n = int(f.readline().strip())

# Phân tích n thành tích các thừa số nguyên tố
factors = prime_factors(n)

# Tính giá trị của s và p
s = sum(x for x in factors if x % 2 == 1)
p = sum(factors)

# Ghi kết quả vào file BAI3.OUT
with open("BAI3.OUT", "w") as f:
    f.write(str(s) + "\n")
    f.write(str(p) + "\n")

Cài đặt Câu 3 bằng ngôn ngữ lập trình C++

#include <iostream>
#include <vector>

using namespace std;

// Hàm phân tích số tự nhiên n thành tích các thừa số nguyên tố
vector<int> prime_factors(int n) {
    vector<int> factors;
    while (n % 2 == 0) {
        factors.push_back(2);
        n /= 2;
    }
    for (int i = 3; i * i <= n; i += 2) {
        while (n % i == 0) {
            factors.push_back(i);
            n /= i;
        }
    }
    if (n > 2) {
        factors.push_back(n);
    }
    return factors;
}

int main() {
    freopen("BAI3.INP", "r", stdin); // Đọc từ file BAI3.INP
    freopen("BAI3.OUT", "w", stdout); // Ghi vào file BAI3.OUT

    // Đọc số tự nhiên n từ stdin (đã được redirect từ file BAI3.INP)
    int n;
    cin >> n;

    // Phân tích n thành tích các thừa số nguyên tố
    vector<int> factors = prime_factors(n);

    // Tính giá trị của s và p
    int s = 0, p = 0;
    for (int x : factors) {
        s += (x % 2 == 1) ? x : 0;
        p += x;
    }

    // Ghi kết quả vào stdout (đã được redirect vào file BAI3.OUT)
    cout << s << "\n" << p << "\n";

    return 0;
}

4 thoughts on “Đề thi Tin học trẻ tỉnh Yên Bái năm 2023 (có đáp án)

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 *