đề thi hsg tin 8

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Ngô Thị Lộc
Ngày gửi: 17h:09' 04-04-2026
Dung lượng: 26.7 KB
Số lượt tải: 17
Nguồn:
Người gửi: Ngô Thị Lộc
Ngày gửi: 17h:09' 04-04-2026
Dung lượng: 26.7 KB
Số lượt tải: 17
Số lượt thích:
0 người
ĐỀ THI CHỌN HỌC SINH GIỎI LỚP 8
NĂM HỌC 2024 – 2025
Môn thi: Tin học
Thời gian làm bài: 120 phút, không kể thời gian giao đề
Đề thi gồm: 02 trang
Lưu ý: Thí sinh tạo thư mục là D:\HSGSBD (Ví dụ D:\HSG001) và lưu các tệp bài làm vào
thư mục vừa tạo.
TỔNG QUAN BÀI THI
Tên bài
Tên bài làm
Điểm
Câu 1
HIỆU CHỮ SỐ.*
5,0
Câu 2
SỐ LẶP.*
5,0
Câu 3
TỔNG ĐOẠN CON.*
5,0
Câu 4
SỐ NGUYÊN TỐ BỊ THIẾU.*
5,0
Phần mở rộng: *.pas đối với NN Pascal; *.cpp đối với NN C++; *.c đối với NN C.
Lập trình giải các bài toán sau (thời gian chạy tối đa cho mỗi bài là 1 giây)
Câu 1: Hiệu chữ số (HIEUCHUSO)
Cho số nguyên dương n. Tính hiệu giữa tổng các chữ số chẵn và tổng các chữ số lẻ của n.
Dữ liệu vào: Một dòng chứa số nguyên dương n (1 ≤ n ≤ 10^18).
Kết quả: Một số nguyên là hiệu tổng chẵn – tổng lẻ.
Câu 2: Số lặp (SOLAP)
Cho mảng gồm n số nguyên dương. Hãy tìm số đầu tiên xuất hiện nhiều hơn một lần.
Dữ liệu vào:
• Dòng đầu chứa số nguyên n (1 ≤ n ≤ 10^6).
• Dòng thứ hai chứa n số nguyên.
Kết quả: Ghi ra số đầu tiên bị lặp. Nếu không có thì in ra -1.
Câu 3: Tổng đoạn con (TONGDOAN)
Cho mảng gồm n số nguyên. Tìm đoạn con liên tiếp có tổng lớn nhất.
Dữ liệu vào:
• Dòng đầu ghi số nguyên dương n (1 ≤ n ≤ 10^6).
• Dòng thứ hai ghi n số nguyên.
Kết quả: Ghi ra tổng lớn nhất của đoạn con liên tiếp.
Câu 4: Số nguyên tố bị thiếu (SOTHIEU)
Cho một mảng gồm n số nguyên tố khác nhau trong đoạn từ 1 đến m. Hãy tìm số nguyên tố
nhỏ nhất chưa có trong mảng.
Dữ liệu vào:
• Dòng đầu chứa hai số nguyên dương n và m (1 ≤ n ≤ 10^5, m ≤ 10^6).
• Dòng thứ hai chứa n số nguyên tố khác nhau ≤ m.
Kết quả: In ra số nguyên tố nhỏ nhất không xuất hiện trong mảng.
GỢI Ý TRẢ LỜI
Câu 1: Hiệu chữ số
int main() {
long long n;
cin >> n;
int tongChan = 0, tongLe = 0;
while (n > 0) {
int d = n % 10;
if (d % 2 == 0) tongChan += d;
else tongLe += d;
n /= 10;
}
cout << tongChan - tongLe;
}
Câu 2: Số lặp
int main() {
int n, x;
cin >> n;
map mp;
for (int i = 0; i < n; i++) {
cin >> x;
mp[x]++;
if (mp[x] == 2) {
cout << x;
return 0;
}
}
cout << -1;
}
Câu 3: Tổng đoạn con
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) cin >> a[i];
int maxSum = a[0], currSum = a[0];
for (int i = 1; i < n; i++) {
currSum = max(a[i], currSum + a[i]);
maxSum = max(maxSum, currSum);
}
cout << maxSum;
}
Câu 4: Số nguyên tố bị thiếu
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i*i <= n; i++)
if (n % i == 0) return false;
return true;
}
int main() {
int n, m, x;
cin >> n >> m;
set s;
for (int i = 0; i < n; i++) {
cin >> x;
s.insert(x);
}
for (int i = 2; i <= m + 100; i++) {
if (isPrime(i) && s.find(i) == s.end()) {
cout << i;
break;
}
}
}
NĂM HỌC 2024 – 2025
Môn thi: Tin học
Thời gian làm bài: 120 phút, không kể thời gian giao đề
Đề thi gồm: 02 trang
Lưu ý: Thí sinh tạo thư mục là D:\HSGSBD (Ví dụ D:\HSG001) và lưu các tệp bài làm vào
thư mục vừa tạo.
TỔNG QUAN BÀI THI
Tên bài
Tên bài làm
Điểm
Câu 1
HIỆU CHỮ SỐ.*
5,0
Câu 2
SỐ LẶP.*
5,0
Câu 3
TỔNG ĐOẠN CON.*
5,0
Câu 4
SỐ NGUYÊN TỐ BỊ THIẾU.*
5,0
Phần mở rộng: *.pas đối với NN Pascal; *.cpp đối với NN C++; *.c đối với NN C.
Lập trình giải các bài toán sau (thời gian chạy tối đa cho mỗi bài là 1 giây)
Câu 1: Hiệu chữ số (HIEUCHUSO)
Cho số nguyên dương n. Tính hiệu giữa tổng các chữ số chẵn và tổng các chữ số lẻ của n.
Dữ liệu vào: Một dòng chứa số nguyên dương n (1 ≤ n ≤ 10^18).
Kết quả: Một số nguyên là hiệu tổng chẵn – tổng lẻ.
Câu 2: Số lặp (SOLAP)
Cho mảng gồm n số nguyên dương. Hãy tìm số đầu tiên xuất hiện nhiều hơn một lần.
Dữ liệu vào:
• Dòng đầu chứa số nguyên n (1 ≤ n ≤ 10^6).
• Dòng thứ hai chứa n số nguyên.
Kết quả: Ghi ra số đầu tiên bị lặp. Nếu không có thì in ra -1.
Câu 3: Tổng đoạn con (TONGDOAN)
Cho mảng gồm n số nguyên. Tìm đoạn con liên tiếp có tổng lớn nhất.
Dữ liệu vào:
• Dòng đầu ghi số nguyên dương n (1 ≤ n ≤ 10^6).
• Dòng thứ hai ghi n số nguyên.
Kết quả: Ghi ra tổng lớn nhất của đoạn con liên tiếp.
Câu 4: Số nguyên tố bị thiếu (SOTHIEU)
Cho một mảng gồm n số nguyên tố khác nhau trong đoạn từ 1 đến m. Hãy tìm số nguyên tố
nhỏ nhất chưa có trong mảng.
Dữ liệu vào:
• Dòng đầu chứa hai số nguyên dương n và m (1 ≤ n ≤ 10^5, m ≤ 10^6).
• Dòng thứ hai chứa n số nguyên tố khác nhau ≤ m.
Kết quả: In ra số nguyên tố nhỏ nhất không xuất hiện trong mảng.
GỢI Ý TRẢ LỜI
Câu 1: Hiệu chữ số
int main() {
long long n;
cin >> n;
int tongChan = 0, tongLe = 0;
while (n > 0) {
int d = n % 10;
if (d % 2 == 0) tongChan += d;
else tongLe += d;
n /= 10;
}
cout << tongChan - tongLe;
}
Câu 2: Số lặp
int main() {
int n, x;
cin >> n;
map
for (int i = 0; i < n; i++) {
cin >> x;
mp[x]++;
if (mp[x] == 2) {
cout << x;
return 0;
}
}
cout << -1;
}
Câu 3: Tổng đoạn con
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) cin >> a[i];
int maxSum = a[0], currSum = a[0];
for (int i = 1; i < n; i++) {
currSum = max(a[i], currSum + a[i]);
maxSum = max(maxSum, currSum);
}
cout << maxSum;
}
Câu 4: Số nguyên tố bị thiếu
bool isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i*i <= n; i++)
if (n % i == 0) return false;
return true;
}
int main() {
int n, m, x;
cin >> n >> m;
set
for (int i = 0; i < n; i++) {
cin >> x;
s.insert(x);
}
for (int i = 2; i <= m + 100; i++) {
if (isPrime(i) && s.find(i) == s.end()) {
cout << i;
break;
}
}
}
 








Các ý kiến mới nhất