Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án)

docx 132 trang Đình Phong 23/11/2025 410
Bạn đang xem 25 trang mẫu của tài liệu "Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docxtuyen_tap_10_de_thi_tin_hoc_tre_ha_noi_kem_dap_an.docx

Nội dung text: Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án)

  1. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn if (!(cin >> N >> X >> Y)) { return 1; } // --- 1. Tính Tổng Hàng X (TongHang_X) --- // Hàng X chứa các số từ (X*N) về (X*N - N + 1) // TongHang_X = (X * N - N + 1) + ... + (X * N) // Tổng cấp số cộng: k * (a_min + a_max) / 2 // k = N long long a_min_hang = X * N - N + 1; long long a_max_hang = X * N; long long TongHang_X = N * (a_min_hang + a_max_hang) / 2; // --- 2. Tính Tổng Cột Y (TongCot_Y) --- // Cột Y chứa các số: (N - Y + 1), (2N - Y + 1), ..., (N*N - Y + 1) // Tổng này là một cấp số cộng với a_min = N - Y + 1, d = N, k = N. // a_max_cot = N*N - N + 1. (Đây là công thức phức tạp hơn, ta dùng tổng trực tiếp) long long TongCot_Y = 0; for (long long i = 1; i <= N; ++i) { // Giá trị tại (i, Y) theo quy tắc "từ phải qua trái": (i * N) - Y + 1 TongCot_Y += (i * N - Y + 1); } // --- 3. Tính Giá trị tại ô giao nhau (V_XY) --- // Công thức cho ma trận "từ phải qua trái": V_XY = X * N - Y + 1 long long V_XY = X * N - Y + 1; // --- 4. Tính Kết quả cuối cùng --- long long KetQua = TongHang_X + TongCot_Y - V_XY; // In kết quả ra màn hình cout << KetQua << endl; return 0; DeThi.edu.vn
  2. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn } Bài 5: Số nhỏ nhất chia hết cho 6 C++ #include #include #include #include #include using namespace std; // Hàm kiểm tra xem một chữ số có phải là chẵn (0, 2, 4, 6, 8) không bool is_even(char c) { int digit = c - '0'; return (digit % 2 == 0); } // Hàm để tạo số nhỏ nhất từ một vector các chữ số string create_smallest_number(string s) { if (s.empty()) return ""; // Sắp xếp các chữ số tăng dần sort(s.begin(), s.end()); // Xử lý trường hợp số 0 ở đầu (nếu có) if (s.length() > 1 && s[0] == '0') { // Tìm chữ số khác 0 nhỏ nhất size_t first_non_zero = s.find_first_not_of('0'); if (first_non_zero != string::npos) { // Hoán đổi '0' đầu tiên với chữ số khác 0 nhỏ nhất đầu tiên swap(s[0], s[first_non_zero]); } // Nếu tất cả đều là '0', số nhỏ nhất vẫn là "0" (nhưng theo đề bài, số không có 0 ở đầu) // Tuy nhiên, vì số phải chia hết cho 6, và tổng chia hết cho 3, nên sẽ có chữ số khác 0 // trừ khi input chỉ toàn '0', mà đề bài nói không quá 100 chữ số. DeThi.edu.vn
  3. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn } return s; } int main() { // Input là chuỗi vì số lượng chữ số có thể lên đến 100 string s; cin >> s; // --- B1: Kiểm tra Điều kiện Chia hết cho 3 (Tổng chữ số) --- long long sum_of_digits = 0; for (char c : s) { sum_of_digits += (c - '0'); } if (sum_of_digits % 3 != 0) { cout << 0 << endl; return 0; } // --- B2: Kiểm tra Điều kiện Chia hết cho 2 (Có chữ số chẵn không) --- vector even_digits; for (char c : s) { if (is_even(c)) { even_digits.push_back(c); } } if (even_digits.empty()) { cout << 0 << endl; return 0; } // --- B3: Tạo số nhỏ nhất chia hết cho 6 --- string result = ""; string smallest_number_overall = "9"; // Dùng để so sánh số nhỏ nhất DeThi.edu.vn
  4. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn // Thử TẤT CẢ các chữ số chẵn có thể làm chữ số cuối cùng for (char end_digit : even_digits) { // 1. Tạo chuỗi tạm bằng cách loại bỏ chữ số chẵn này string temp_s = s; size_t pos = temp_s.find(end_digit); if (pos != string::npos) { temp_s.erase(pos, 1); } else { continue; // Lỗi logic, nên bỏ qua } // 2. Sắp xếp các chữ số còn lại và xử lý '0' đầu string prefix = create_smallest_number(temp_s); // 3. Ghép thành số mới string current_number = prefix + end_digit; // Cần đảm bảo rằng số tạo ra không có 0 ở đầu nếu nó có nhiều hơn 1 chữ số if (current_number.length() > 1 && current_number[0] == '0') { // Trường hợp này xảy ra khi tất cả các chữ số còn lại là '0', // điều này chỉ xảy ra khi input chỉ toàn '0' và 1 chữ số chẵn khác 0, // nhưng tổng chia hết cho 3. // Nếu input là "300", 300 thỏa mãn, end_digit = '0'. prefix = "03". // Hàm create_smallest_number sẽ xử lý thành "30". // current_number = "30" + "0" = "300". } // 4. Cập nhật số nhỏ nhất tổng thể if (smallest_number_overall == "9" || current_number < smallest_number_overall) { smallest_number_overall = current_number; } } // Trường hợp cuối cùng: kiểm tra nếu số nhỏ nhất tổng thể vẫn là "9" (không được cập nhật) if (smallest_number_overall == "9") { DeThi.edu.vn
  5. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn cout << 0 << endl; } else { // Nếu số tạo ra chỉ là "0", nhưng nó phải là số nhỏ nhất chia hết cho 6 if (smallest_number_overall.length() == 1 && smallest_number_overall[0] == '0') { cout << 0 << endl; // Số 0 không được coi là số tự nhiên có nghĩa } else { cout << smallest_number_overall << endl; } } return 0; DeThi.edu.vn
  6. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn ĐỀ SỐ 2 HỘI THI TIN HỌC TRẺ ĐỀ THI VÒNG SƠ KHẢO THÀNH PHỐ HÀ NỘI BẢNG A Thời gian: 90 phút (không kể thời gian giao đề) Bài 1: Tìm số 3 Cho một số tự nhiên N, hãy tìm số tự nhiên lớn nhất nhỏ hơn N và chia hết cho 3. Dữ liệu vào: - Một dòng duy nhất chứa số tự nhiên N. Dữ liệu ra: - In ra kết quả tìm được. Ví dụ: Input Output 10 9 6 3 Bài 2: Gần tròn chục Số tròn chục là số tự nhiên có tận cùng là 0. Ví dụ: số 0, 10, 100, 1000, là số tròn chục. Cho một số tự nhiên N. Tìm số tròn chục gần N nhất. Nếu có nhiều số cùng thoả mãn thì in ra số lớn hơn. Dữ liệu vào từ thiết bị vào chuẩn: - Gồm một dòng chứa một số tự nhiên N (N ≤ 106). Kết quả ghi ra thiết bị ra chuẩn: - Gồm một dòng chứa một số tự nhiên là kết quả của bài toán. Ví dụ: Dữ liệu Kết quả 13 10 29 30 5 10 Bài 3: Tô màu tháp tam giác Cho tháp tam giác được tô màu theo quy luật như hình vẽ: DeThi.edu.vn
  7. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn Mô tả quy luật tô màu: - Dòng 1 của tháp tam giác: tô màu các tam giác trên; - Dòng 2 của tháp tam giác: tô màu các tam giác dưới; - Dòng 3 của tháp tam giác: tô màu các tam giác trên; - Dòng 4 của tháp tam giác: tô màu các tam giác dưới; - .......... Cho một số tự nhiên là số dòng của tháp tam giác. Hãy đếm xem có bao nhiêu ô được tô màu trong tháp tam giác có dòng. Dữ liệu vào từ thiết bị vào chuẩn: - Gồm một dòng chứa một số tự nhiên N (N ≤ 109) Kết quả ghi ra thiết bị ra chuẩn: - Gồm một dòng chứa một số tự nhiên là kết quả của bài toán. Vi kết quả có thể rất lớn nên chỉ cần in ra hai chữ số cuối cùng của kết quả (phần du khi chia cho 100). Ví dụ: Dữ liệu vào Kết quả ra 2 2 3 5 Ràng buộc: - Có 80% số test ứng với 80% số điểm có: N ≤ 100; - 20% số test còn lại ứng với 20% số điểm không có ràng buộc gì thêm. Bài 4: FIBO100 Cho dãy số Fibonacci có quy luật như sau: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, Dãy số A là dãy số có các phần tử là hai chữ số tận cùng của các phần tử của dãy số Fibonacci. Dãy số A như sau: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 44, 33, Cho số tự nhiên N, hãy tính tổng N phần tử đầu tiên của dãy số A. Dữ liệu vào từ thiết bị vào chuẩn: - Gồm một dòng chứa một số tự nhiên N (N ≤ 1012). Kết quả ghi ra thiết bị ra chuẩn: - Gồm một dòng, chứa một số tự nhiên là kết quả của bài toán. Vì kết quả có thể rất lớn nên chỉ cần in ra hai chữ số cuối cùng của kết quả (phần dư khi chia cho 100). Ví dụ: Dữ liệu Kết quả 4 7 DeThi.edu.vn
  8. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn Ràng buộc: - Có 70% số test ứng với 70% số điểm có: N ≤ 100; - 30% số test còn lại ứng với 30% số điểm không có ràng buộc gì thêm. Bài 5: Đếm số chia hết Cho ba số tự nhiên N, A, B. Hãy đếm số lượng số X thoả mãn điều kiện: - X ≤ N; - X chỉ chia hết cho A hoặc chia hết cho B (chỉ chia hết một trong hai số). Dữ liệu vào từ thiết bị vào chuẩn: - Dòng đầu tiên chứa một số tự nhiên N (N ≤ 1012); - Dòng thứ hai chứa một số tự nhiên A (A ≤ 1012); - Dòng thứ ba chứa một số tự nhiên B (B ≤ 1012); Kết quả ghi ra thiết bị ra chuẩn: - Gồm một dòng, chứa một số tự nhiên là số lượng số X thoả mãn. Ví dụ: Dữ liệu Kết quả Giải thích 10 6 Các số X thoả mãn là: 2, 3, 4, 8, 9, 10. 2 3 Ràng buộc: - Có 40% số test ứng với 40% số điểm có: N, A, B ≤ 1000; - 30% số test khác ứng với 30% số điểm có: A = 2; B = 3; - 30% số test còn lại ứng với 30% số điểm không có ràng buộc gì thêm. ---------HẾT--------- DeThi.edu.vn
  9. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn ĐÁP ÁN Bài 1: Tìm số 3 C++ #include #include using namespace std; // Sử dụng long long (ll) để đảm bảo khả năng xử lý các giá trị N lớn typedef long long ll; void solve() { ll N; // Đọc số tự nhiên N if (!(cin >> N)) return; // 1. Tính số dư r = N % 3 ll remainder = N % 3; ll K; // 2. Xác định K dựa trên số dư if (remainder == 0) { // Trường hợp N chia hết cho 3. K phải nhỏ hơn N, nên ta trừ đi 3. // Ví dụ: N=6, remainder=0. K = 6 - 3 = 3. K = N - 3; } else { // Trường hợp N chia 3 dư 1 hoặc 2. Chỉ cần trừ đi số dư để có số chia hết cho 3 // và là số lớn nhất nhỏ hơn N. // Ví dụ: N=10, remainder=1. K = 10 - 1 = 9. // Ví dụ: N=8, remainder=2. K = 8 - 2 = 6. K = N - remainder; } cout << K << endl; } DeThi.edu.vn
  10. Tuyển tập 10 Đề thi Tin Học Trẻ Hà Nội (Kèm đáp án) - DeThi.edu.vn int main() { // Tối ưu tốc độ I/O ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); return 0; } Bài 2: Gần tròn chục C++ #include #include #include using namespace std; void solve() { int N; // Đọc số tự nhiên N (N <= 10^6) if (!(cin >> N)) return; // 1. Tìm chữ số cuối cùng (remainder) int remainder = N % 10; int result; // 2. Quyết định số tròn chục gần nhất theo quy tắc làm tròn lên khi số dư >= 5 if (remainder < 5) { // Làm tròn xuống (gần K1 hơn): K = N - remainder // Ví dụ: N=13, remainder=3. K = 13 - 3 = 10. result = N - remainder; } else { // Làm tròn lên (gần K2 hơn hoặc bằng): K = N + (10 - remainder) // Ví dụ: N=29, remainder=9. K = 29 + (10 - 9) = 30. // Ví dụ: N=5, remainder=5. K = 5 + (10 - 5) = 10 (chọn số lớn hơn). DeThi.edu.vn