Bài giải 28 Bộ đề thi HSG cấp huyện môn Tin học THCS (Python và C++)
Bạn đang xem 20 trang mẫu của tài liệu "Bài giải 28 Bộ đề thi HSG cấp huyện môn Tin học THCS (Python và C++)", để 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:
bai_giai_28_bo_de_thi_hsg_cap_huyen_mon_tin_hoc_thcs_python.pdf
Nội dung text: Bài giải 28 Bộ đề thi HSG cấp huyện môn Tin học THCS (Python và C++)
- NGUYỄN HỮU TRUNG BÀI GIẢI 28 BỘ ĐỀ THI HỌC SINH GIỎI CẤP HUYỆN – MÔN TIN THCS ( PYTHON VÀ C++ ) (Tái bản lần 1, có chỉnh lí, bổ sung) 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 1
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) LỜI NÓI ĐẦU Xin chào tất cả quý đọc giả! Sở dĩ ngay từ đầu trang bìa tôi có ghi “Tái bản lần 1, có chỉnh lí, bổ sung” đó là vì: Trước đây tôi đã từng đăng bài giải của những bộ đề này lên một lần rồi. Nhưng sau khi rà soát lại, tôi thấy ở lần đăng trước vẫn còn nhiều bài giải có thuật toán chưa được tối ưu và vẫn còn nhiều sai sót. Chính vì vậy, đối với tất cả các bài giải ở lần đăng này, bản thân tôi đã cố gắng tìm tòi, học hỏi và đã điều chỉnh lại thuật toán về mức tối ưu hơn, và tôi cũng đã điều chỉnh lại những sai sót của những bài giải đã từng đăng trước đây. Mỗi bài giải ở lần đăng này đều được viết bằng cả 2 NNLT là Python và C++. Tuy nhiên, nguyên nhân chính là do sự hiểu biết của bản thân tôi còn hạn chế, và một nguyên nhân nhỏ nữa là do tôi không có được bộ Test của chính người ra đề thi mà các bài giải chỉ có thể dựa vào ví dụ mẫu của đề cùng với những bộ Test do tôi đặt ra để kiểm tra. Nên trong bài soạn chắc vẫn còn đâu đó một số bài giải có thuật toán chưa được tối ưu nhất, và vẫn còn đâu đó một số sai sót mà tôi chưa tìm ra. Rất mong quý đọc giả khi xem qua bài soạn, nếu thấy bài giải nào có thuật toán còn chưa được tối ưu và bài giải nào còn sai sót, thì xin nhờ quý đọc giả góp ý thêm cho tôi để tôi có thể điều chỉnh lại bài soạn của mình được tốt hơn, cũng như là quý đọc giả giúp cho bản tôi có thêm được sự hiểu biết về kiến thức. Xin cảm ơn quý đọc giả! Quảng Nam, tháng 6 năm 2024 Nguyễn Hữu Trung 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 2
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) MỤC LỤC ĐỀ SỐ 1 ...................................................................................................................................... 4 ĐỀ SỐ 2 .................................................................................................................................... 11 ĐỀ SỐ 3 .................................................................................................................................... 20 ĐỀ SỐ 4 .................................................................................................................................... 26 ĐỀ SỐ 5 .................................................................................................................................... 32 ĐỀ SỐ 6 .................................................................................................................................... 37 ĐỀ SỐ 7 .................................................................................................................................... 43 ĐỀ SỐ 8 .................................................................................................................................... 50 ĐỀ SỐ 9 .................................................................................................................................... 56 ĐỀ SỐ 10 .................................................................................................................................. 62 ĐỀ SỐ 11 .................................................................................................................................. 71 ĐỀ SỐ 12 .................................................................................................................................. 79 ĐỀ SỐ 13 .................................................................................................................................. 84 ĐỀ SỐ 14 .................................................................................................................................. 91 ĐỀ SỐ 15 .................................................................................................................................. 97 ĐỀ SỐ 16 ................................................................................................................................ 103 ĐỀ SỐ 17 ................................................................................................................................ 108 ĐỀ SỐ 18 ................................................................................................................................ 116 ĐỀ SỐ 19 ................................................................................................................................ 122 ĐỀ SỐ 20 ................................................................................................................................ 126 ĐỀ SỐ 21 ................................................................................................................................ 132 ĐỀ SỐ 22 ................................................................................................................................ 138 ĐỀ SỐ 23 ................................................................................................................................ 144 ĐỀ SỐ 24 ................................................................................................................................ 146 ĐỀ SỐ 25 ................................................................................................................................ 151 ĐỀ SỐ 26 ................................................................................................................................ 156 ĐỀ SỐ 27 ................................................................................................................................ 161 ĐỀ SỐ 28 ................................................................................................................................ 169 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 3
- ĐỀ SỐ 1 Bài 1. (5,0đ) Cho bài toán sau: Vừa gà vừa chó; Bó lại cho tròn; Có m con và n chân. Hỏi có mấy gà, mấy chó? Viết chương trình nhập hai số nguyên dương m, n (m, n < 105). In ra màn hình: Số con gà và số con chó tìm được (Nếu không tìm được in ra KHONG). Ví dụ: Với m = 36, n = 100 thì in ra kết quả: Ga = 22; Cho = 14 Bài 2. (6,0đ) Viết chương trình nhập số nguyên dương n (n < 104) từ bàn phím. In ra màn hình: + Số P là tổng các chữ số của n; 1 1 1 1 (−1)푛 + Tổng S = − + − + − , kết quả lấy 4 chữ số thập phân; 2 3 4 5 푛+1 + Tìm k lớn nhất để 1.2 + 2.3 + 3.4 + + k(k + 1) ≤ n2 Ví dụ: Với n = 16 thì in ra kết quả: P = 7; S = 0,2783; k = 8 Bài 3. (5,0đ) Viết chương trình nhập một xâu kí tự S chỉ gồm các chữ cái in thường và chữ số. In ra màn hình: + Số tự nhiên a sau khi xóa các chữ cái trong S; + Xóa một số chữ số của a để được số tự nhiên b lớn nhất chia hết cho 5 (nếu không tìm được in ra KHONG). + Số T là tổng các số có trong xâu S; Ví dụ: Với S = hsg8ngay21thang4nam2023, thì in ra kết quả: a = 82142023; b = 821420; T = 2056 Bài 4. (4,0đ) Mã số của một số nguyên dương được xác định như sau: Tính tổng các chữ số của số đó, sau đó tính lại tổng các chữ số của số mới tạo được cho đến khi chỉ còn một chữ số duy nhất (Ví dụ: 59 → 5 + 9 = 14 → 1 + 4 = 5 → mã số của 59 là 5). Viết chương trình nhập n số nguyên dương có k chữ số (k < 109). In ra màn hình mã số của các số vừa nhập và các số có cùng mã số với số lượng nhiều nhất (Nếu nhiều mã số có số lượng bằng nhau thì chọn mã số có giá trị nhỏ nhất). Ví dụ: Với n = 5 và các số nhập là: 23 7 59 26 50 thì in ra kết quả: Ma so: 5 7 5 8 5 Cac so cung ma nhieu nhat: 23; 59; 50 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 4
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) BÀI GIẢI ĐỀ SỐ 1 Bài 1. (5,0đ) m = int(input('m = ')) n = int(input('n = ')) kiemtra = 0 i = 1 while i <= m: if (2 * i + 4 * (m - i) == n): kiemtra = kiemtra + 1 print('Ga =', i, '; Cho =', m - i) i = i + 1 if kiemtra == 0: print('KHONG') Bài 1. (5,0đ) #include #include #include using namespace std; int main() { int m, n, kiemtra, i; cout > m; cout > n; kiemtra = 0; i = 1; while (i <= m) { if (2 * i + 4 * (m - i) == n) { kiemtra = kiemtra + 1; cout << "Ga = " << i << "; Cho = " << m - i; cout << endl; } i = i + 1; } if (kiemtra == 0) cout << "KHONG"; return 0; } Bài 2. (6,0đ) n = int(input('n = ')) m = n P = 0 while n != 0: P = P + n % 10 n = n // 10 print("P =", P) 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 5
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) S = 0 i = 2 while i <= m + 1: if i % 2 == 0: S = S + 1/i else: S = S - 1/i i = i + 1 print("S = %.4f" %S) T = 0 k = 0 while T <= m**2: k = k + 1 T = T + k *(k+1) if T == m**2: print('k =',k) else: print('k =', k - 1) Bài 2. (6,0đ) #include #include #include using namespace std; int main() { int n, m, P, i, T, k; float S; cout > n; m = n; P = 0; while (n != 0) { P = P + n % 10; n = n / 10; } cout << "P = " << P << endl; S = 0; i = 2; while (i <= m + 1) { if (i % 2 == 0) S = float(S) + float(1)/float(i); else S = float(S) - float(1)/float(i); i = i + 1; } cout << "S = " << setprecision(4) << fixed << S << endl; T = 0; k = 0; while (T <= m * m) { k = k + 1; T = T + k * (k + 1); } 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 6
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) if (T == m * m) cout << "k = " << k; else cout << "k = " << k - 1; return 0; } Bài 3. (5,0đ) S = str(input('S = ')) S = S + " " so = ['9','8','7','6','5','4','3','2','1','0'] xaucon = [] xc = '' for i in range(0, len(S)): if S[i] in so: xc = xc + S[i] else: xaucon.append(xc) xc = '' if (S[i - 1] in so) and (S[i] not in so): xaucon.append(xc) a = "" T = 0 for i in range(0, len(xaucon)): if xaucon[i] != '': a = a + xaucon[i] T = T + int(xaucon[i]) b = int(a) while b % 5 != 0: b = b // 10 print('a =', a) print('b =', b) print('T =', T) Bài 3. (5,0đ) #include #include #include #include using namespace std; int main() { string S; cout > S; S = S + " "; vector xaucon; string xc; xc = ""; int i; for (i = 0; i < S.length(); i++) { if (S[i] >= '0' && S[i] <= '9') xc = xc + S[i]; 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 7
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) else { xaucon.push_back(xc); xc = ""; if (S[i - 1] >= '0' && S[i - 1] '9') xaucon.push_back(xc); } } string a = ""; int T = 0; for (i = 0; i < xaucon.size(); i++) if (xaucon[i] != "") { a = a + xaucon[i]; stringstream songuyen(xaucon[i]); int k = 0; songuyen >> k; T = T + k; } long long int b = stoi(a); while (b % 5 != 0) { b = b / 10; } cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "T = " << T << endl; return 0; } Bài 4. (4,0đ) Mã số n = int(input('n = ')) """ Hay nhap cac phan tu cua mang ngay sau dong thong bao "Cac so da nhap la: " va moi phan tu nhap vao phai cach nhau mot dau cach dung theo yeu cau cua de bai """ a = input('Cac so nhap la: ') a = a.split() a = list(map(str, a)) def timmaso(k): if k == 0: return 0 ketqua = 0 for i in range(0, len(k)): ketqua = (ketqua + int(k[i])) % 9 if ketqua == 0: return 9 else: return ketqua % 9 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 8
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) MS = [] for i in range(0, len(a)): MS.append(timmaso(a[i])) print('Ma so:', end=' ') for i in range(0, len(MS)): print(MS[i], end=' ') print() tam = [] for i in range(0, len(MS)): tam.append(MS[i]) tam.sort() tam.append(tam[len(tam) - 1] + 1) dem = 1 max = 1 for i in range(1, len(tam)): if tam[i] == tam[i - 1]: dem = dem + 1 else: if dem > max: max = dem sonhieunhat = tam[i - 1] dem = 1 print('Cac so co cung ma nhieu nhat:', end=' ') cacsocantim = "" for i in range(0, len(a)): if MS[i] == sonhieunhat: cacsocantim = cacsocantim + a[i] + "; " ketqua = "" for i in range(0, len(cacsocantim) - 2): ketqua = ketqua + cacsocantim[i] print(ketqua) Bài 4. (4,0đ) Mã số #include #include #include using namespace std; int timmaso(string k) { int ketqua, i, so; if (k == "0") return 0; ketqua = 0; for (i = 0; i < k.length(); i++) { so = k[i] - '0'; ketqua = (ketqua + so) % 9; } if (ketqua == 0) return 9; else return ketqua % 9; } 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 9
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) string a[1000006]; int n, i; int main() { cout > n; cout << "Cac so nhap la: "; for (i = 0; i < n; i++) cin >> a[i]; vector MS; for (i = 0; i < n; i++) MS.push_back(timmaso(a[i])); cout << "Ma so: "; for (i = 0; i < MS.size(); i++) cout << MS[i] << " "; cout << endl; vector tam; for (i = 0; i < MS.size(); i++) tam.push_back(MS[i]); sort(tam.begin(), tam.end()); tam.push_back(tam[tam.size() - 1] + 1); int dem, max, sonhieunhat; dem = 1; max = 1; for (i = 1; i < tam.size(); i++) { if (tam[i] == tam[i - 1]) dem = dem + 1; else { if (dem > max) { max = dem; sonhieunhat = tam[i - 1]; } dem = 1; } } cout << "Cac so co cung ma nhieu nhat: "; string cacsocantim, ketqua; cacsocantim = ""; for (i = 0; i < n; i++) if (MS[i] == sonhieunhat) cacsocantim = cacsocantim + a[i] + "; "; ketqua = ""; for (i = 0; i < cacsocantim.length() - 2; i++) ketqua = ketqua + cacsocantim[i]; cout << ketqua << endl; return 0; } 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 10
- ĐỀ SỐ 2 Bài 1: (6,0đ) Viết chương trình nhập số tự nhiên n (n > 2). In ra màn hình: + Số chữ số của n; + Tổng các chữ số của n; + Tổng các số nguyên tố nhỏ hơn n; + Số nguyên tố (khác n) gần n nhất. Ví dụ: Với n = 24, thì in kết quả: + 24 co 2 chu so + Tong cac chu so cua 24 la: 6 + Tong cac so nguyen to nho hon 24 la: 100 + So nguyen to gan 24 nhat la: 23 Bài 2: (6,0đ) Số bậc thang là số tự nhiên có các chữ số đứng sau không nhỏ hơn chữ số đứng trước (ví dụ: 123; 233). Viết chương trình nhập 2 số tự nhiên a, b (10 < a ≤ b). In ra màn hình: + Ước chung lớn nhất của a và b + Phân số tối giản a/b. + Các số chính phương từ a đến b. + Số lượng các Số bậc thang từ a đến b. Ví dụ: Với a = 32, b = 40 thì in ra kết quả: + UCLN la: 8 + Phan so toi gian la: 4/5 + Cac so chinh phuong la: 36 + Co 7 So bac thang Bài 3: (4,0đ) Viết chương trình nhập một xâu kí tự S gồm các chữ cái in thường, chữ số và kí tự trống (dấu cách). In ra màn hình: + Tổng các chữ số có trong xâu S; + Xâu S1 sau khi xóa các kí tự số trong S; + Xâu S2 sau khi xóa các kí tự liên tiếp giống nhau trong S1 chỉ giữ lại 1 kí tự. Ví dụ: Với S = 5trrraann thhhhiii45 ttthannh ta64mmm, thì in ra kết quả: + Tong cac chu so la: 24 + S1 = trrraann thhhhiii ttthannh tammm + S2 = tran thi thanh tam Bài 4: (4,0đ) Để dễ dàng theo dõi những người thuộc diện F1 (có tiếp xúc gần với F0), Ban chỉ đạo phòng chống dịch bệnh Covid-19 bố trí các phòng ở khu cách ly theo yêu cầu sau: - Phân các F1 thành n nhóm nhỏ theo thời gian phát hiện, mỗi nhóm không quá 4 người; - Bố trí các nhóm vào chung phòng, mỗi phòng không quá 4 người; - Các F1 trong một nhóm nhỏ phải ở chung một phòng. Viết chương trình nhập n số tự nhiên nhỏ hơn 5 tương ứng với số người F1 trong n nhóm nhỏ (1 < n < 104). In ra màn hình số phòng ít nhất cần sử dụng để cách ly theo các yêu cầu trên. Ví dụ: Với n = 6 và nhập các số: 1 4 2 3 2 3 thì in kết quả: So phong it nhat la: 4 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 11
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) BÀI GIẢI ĐỀ SỐ 2 Bài 1: (6,0đ) import math n = int(input('n = ')) m = n dem = 0 tong = 0 while m != 0: dem = dem + 1 tong = tong + m % 10 m = m // 10 print(n, 'co', dem, 'chu so') print('Tong cac chu so cua', n, 'la:', tong) def sangnguyento(n, nguyento): nguyento[0] = False nguyento[1] = False for k in range(2, int(math.sqrt(n)) + 1): if nguyento[k] == True: for i in range(k * k, n + 1, k): nguyento[i] = False a = [] tong = 0 nguyento = [True] * (n + 1) sangnguyento(n, nguyento) for i in range(2, n): if nguyento[i] == True: tong = tong + i a.append(i) print('Tong cac so nguyen to nho hon', n, 'la:', tong) def nguyento(x): if x 1 if (x % 2 == 0) or (x % 3 == 0): return False for i in range(5, int(math.sqrt(x)) + 1, 6): if (x % i == 0) or (x % (i + 2) == 0): return False return True m = n + 1 while nguyento(m) == False: m = m + 1 print('So nguyen to gan', n, 'nhat la:', end=' ') if (n - a[len(a) - 1]) <= (m - n): print(a[len(a) - 1]) else: print(m) Bài 1: (6,0đ) #include #include #include using namespace std; void sangnguyento(long long int n, bool nguyento[]) { nguyento[0] = false; nguyento[1] = false; 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 12
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) for (int k = 2; k < sqrt(n) + 1; k++) { if (nguyento[k] == true) { for (int i = k*k; i < n + 1; i = i + k) nguyento[i] = false; } } } bool ktsnt(long long int x) { if (x <= 1) return false; if (x == 2 || x == 3) return true; if (x % 2 == 0 || x % 3 == 0) return false; for (int i = 5; i <= sqrt(x); i = i + 6) if (x % i == 0 || x % (i + 2) == 0) return false; return true; } int main() { int n, dem, i; long long int m; long long int tong; cout > n; m = n; dem = 0; tong = 0; while (m != 0) { dem = dem + 1; tong = tong + m % 10; m = m / 10; } cout << n << " co " << dem << " chu so" << endl; cout << "Tong cac chu so cua " << n << " la: " << tong << endl; vector a; tong = 0; bool nguyento[n + 1]; memset(nguyento, true, sizeof(nguyento)); sangnguyento(n, nguyento); for (i = 0; i < n; i++) if (nguyento[i] == true) { tong = tong + i; a.push_back(i); } 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 13
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) cout << "Tong cac so nguyen to nho hon " << n << " la: " << tong << endl; m = n + 1; while (ktsnt(m) == false) { m = m + 1; } cout << "So nguyen to gan " << n << " nhat la: "; if ((n - a[a.size() - 1]) <= (m - n)) cout << a[a.size() - 1]; else cout << m; return 0; } Bài 2: (6,0đ) import math a = int(input('a = ')) b = int(input('b = ')) def ucln(a, b): if (a == 0): return b return ucln(b % a, a) print('UCLN la:', ucln(a, b)) tu = a // ucln(a, b) mau = b // ucln(a, b) print('Phan so toi gian la:', tu,'/',mau) print('Cac so chinh phuong la:', end=' ') L = a R = b K = math.ceil(math.sqrt(L)) so = K * K K = (K * 2) + 1 while (so >= L and so <= R): print(so, end=' ') so = so + K K = K + 2 print() def ktsbt(n): bacthang = 1 while n >= 10: so = n % 10 n = n // 10 if so < (n % 10): bacthang = 0 break return bacthang dem = 0 for i in range(a, b + 1): if (i > 10) and (ktsbt(i) == 1): dem = dem + 1 print('Co', dem, 'So bac thang') 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 14
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) Bài 2: (6,0đ) #include #include #include using namespace std; int ucln(int a, int b) { if (a == 0) return b; return ucln(b % a, a); } int ktsbt(int n) { int bacthang, so; bacthang = 1; while (n >= 10) { so = n % 10; n = n / 10; if (so < (n % 10)) bacthang = 0; break; } return bacthang; } int main() { int a, b; cout > a; cout > b; cout << "UCLN la: " << ucln(a, b) << endl; int tu, mau; tu = a / ucln(a, b); mau = b / ucln(a, b); cout << "Phan so toi gian la: " << tu << "/" << mau << endl; cout << "Cac so chinh phuong la: "; int L, R, K, so, dem, i; L = a; R = b; K = ceil(sqrt(L)); so = K * K; K = (K * 2) + 1; while (so >= L && so <= R) { cout << so << " "; so = so + K; K = K + 2; } cout << endl; dem = 0; 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 15
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) for (i = a; i < b + 1; i++) if (i > 10 && ktsbt(i) == 1) dem = dem + 1; cout << "Co " << dem << " So bac thang" << endl; return 0; } Bài 3: (4,0đ) S = str(input('S = ')) mangso = ['9','8','7','6','5','4','3','2','1','0'] tong = 0 for i in range(0, len(S)): if S[i] in mangso: tong = tong + int(S[i]) print("Tong cac chu so la:", tong) S1 = '' for i in range(0, len(S)): if S[i] not in mangso: S1 = S1 + S[i] print('S1 =',S1) S2 = '' for i in range(0, len(S1)): if len(S2) == 0: S2 = S2 + S1[i] k = S1[i] if S1[i] == k: continue else: S2 = S2 + S1[i] k = S1[i] print('S2 =',S2) Bài 3: (4,0đ) #include #include #include using namespace std; int main() { string S, S1, S2; cout << "S = "; getline(cin, S); long long int tong, i; char k; tong = 0; for (char kt : S) if (isdigit(kt)) tong = tong + kt - '0'; cout << "Tong cac chu so la: " << tong << endl; 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 16
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) S1 = ""; for (char kt : S) if (kt '9') S1 = S1 + kt; cout << "S1 = " << S1 << endl; S2 = ""; for (i = 0; i < S1.length(); i++) { if (S2.length() == 0) { S2 = S2 + S1[i]; k = S1[i]; } if (S1[i] == k) continue; else { S2 = S2 + S1[i]; k = S1[i]; } } cout << "S2 = " << S2 << endl; return 0; } Bài 4: (4,0đ) n = int(input('n = ')) """ Nhap mang theo dung dinh dang: Cac phan tu tren cung 1 dong ngay phia sau cau Nhap cac so: va giua moi phan tu cach nhau 1 dau cach """ s = input('Nhap cac so: ') s = s.split() s = list(map(int, s)) soluong1 = 0 soluong2 = 0 soluong3 = 0 soluong4 = 0 for i in range(0, len(s)): if s[i] == 4: soluong4 = soluong4 + 1 if s[i] == 3: soluong3 = soluong3 + 1 if s[i] == 2: soluong2 = soluong2 + 1 if s[i] == 1: soluong1 = soluong1 + 1 soluong = soluong4 soluong4 = 0 if soluong3 == soluong1: soluong = soluong + soluong1 soluong3 = 0 soluong1 = 0 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 17
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) if soluong3 > soluong1: soluong = soluong + soluong1 soluong3 = soluong3 - soluong1 soluong1 = 0 if soluong3 < soluong1: soluong = soluong + soluong3 soluong1 = soluong1 - soluong3 soluong3 = 0 soluong = soluong + soluong3 soluong3 = 0 k = soluong1 // 4 if k > 0: soluong = soluong + k soluong1 = soluong1 % 4 else: soluong1 = soluong1 soluong = soluong + (soluong2*2 + soluong1) // 4 if (soluong2*2 + soluong1) % 4 != 0: soluong = soluong + 1 print('So phong it nhat la:', soluong) Bài 4: (4,0đ) #include #include #include using namespace std; int s[10006], n, i; int main() { cout > n; cout << "Nhap cac so: "; for (i = 0; i < n; i++) cin >> s[i]; int soluong1, soluong2, soluong3, soluong4, soluong, k; soluong1 = 0; soluong2 = 0; soluong3 = 0; soluong4 = 0; for (i = 0; i < n; i++) { if (s[i] == 4) soluong4 = soluong4 + 1; if (s[i] == 3) soluong3 = soluong3 + 1; if (s[i] == 2) soluong2 = soluong2 + 1; if (s[i] == 1) soluong1 = soluong1 + 1; } soluong = soluong4; soluong4 = 0; 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 18
- Người soạn: Nguyễn Hữu Trung ( Python và C++ ) if (soluong3 == soluong1) { soluong = soluong + soluong1; soluong3 = 0; soluong1 = 0; } if (soluong3 > soluong1) { soluong = soluong + soluong1; soluong3 = soluong3 - soluong1; soluong1 = 0; } if (soluong3 < soluong1) { soluong = soluong + soluong3; soluong1 = soluong1 - soluong3; soluong3 = 0; } soluong = soluong + soluong3; soluong3 = 0; k = soluong1 / 4; if (k > 0) { soluong = soluong + k; soluong1 = soluong1 % 4; } else soluong1 = soluong1; soluong = soluong + (soluong2 * 2 + soluong1) / 4; if ((soluong2 * 2 + soluong1) % 4 != 0) soluong = soluong + 1; cout << "So phong it nhat la: " << soluong; return 0; } 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 19
- ĐỀ SỐ 3 Bài 1: (5đ) Số tự nhiên. Viết chương trình nhập một số tự nhiên n có k chữ số (2 < k < 7). In ra màn hình: + Số lượng các ước dương của n; + Số chữ số của n; + Chữ số lớn nhất của n; + Số lớn nhất có k chữ số được sắp xếp bởi k chữ số của n; Ví dụ: Với n = 7168; thì in ra kết quả: - 7168 co 22 uoc - 7168 co 4 chu so - Chu so lon nhat cua 7168 la 8 - So lon nhat la: 8761 Bài 2: (5đ) Số dư. Viết chương trình nhập 3 số nguyên dương a, b, c từ bàn phím (a, b, c < 109). Gọi P là tích lớn nhất được tạo bởi hai trong ba số a, b, c. In ra màn hình: + Số nhỏ nhất trong 3 số đã nhập; + Số dư của phép chia P cho k (k nguyên dương nhập từ bàn phím, k < 104). Ví dụ: Với a, b, c lần lượt là: 5 2 8 và k = 3 thì in ra kết quả: - So nho nhat la: 2 - So du la: 1 (Giải thích: Tích lớn nhất P = 5.8 = 40; 40 chia 3 dư 1) Bài 3: (5đ) Xâu kí tự. Viết chương trình nhập một xâu S có k kí tự chỉ gồm các chữ cái và chữ số (0 < k < 255). In ra màn hình: + Số lượng kí tự số có trong xâu S; + Tổng các số có trong xâu S. Ví dụ: Với S = ‘ngay28thang10nam2021’ thì in ra kết quả: + S co 8 ki tu so + Tong cac so la: 2059 (Giải thích: 28 + 10 + 2021 = 2059) Bài 4: (5đ) Cắt gỗ. Có n thanh gỗ với độ dài lần lượt là a1, a2, , an. Để các thanh gỗ đều có độ dài h mét, người ta phải cắt bỏ đi phần thừa của mỗi thanh (dĩ nhiên những thanh gỗ có độ dài không quá h mét thì không bị cắt). Viết chương trình nhập n số nguyên dương a1, a2, , an là độ dài các thanh gỗ (1 < n < 20) và một số nguyên dương k. In ra màn hình: + Tổng số mét gỗ cắt bỏ đi nếu để thanh gỗ còn lại đều có độ dài bằng thanh ngắn nhất; + Độ dài h lớn nhất khi tổng số mét gỗ cắt đi không nhỏ hơn k mét Ví dụ: Với n = 4 và các số được nhập là: 20 15 10 18 và k = 7 thì in ra màn hình: - Tong so met go cat bo la: 23 - Do dai lon h nhat la: 15 28 Bộ Đề Thi Học Sinh Giỏi Cấp Huyện - Môn Tin THCS - Trang 20



