diff options
-rw-r--r-- | 11/Q-2017/README.md | 119 | ||||
-rw-r--r-- | 11/Q-2017/cau1.scm | 8 | ||||
-rw-r--r-- | 11/Q-2017/cau2.scm | 5 | ||||
-rw-r--r-- | 11/Q-2017/cau3.scm | 7 | ||||
-rw-r--r-- | 11/Q-2017/cau4.scm | 11 |
5 files changed, 150 insertions, 0 deletions
diff --git a/11/Q-2017/README.md b/11/Q-2017/README.md new file mode 100644 index 0000000..1342abb --- /dev/null +++ b/11/Q-2017/README.md @@ -0,0 +1,119 @@ +# KÌ THI CHỌN HỌC SINH GIỎI CẤP CỤM TRƯỜNG THPT NĂM HỌC 2016-2017 + +**Môn thi:** Tin học - Lớp 11 +**Ngày thi:** 01/03/2017 +**Thời gian làm bài:** 150 phút + +## Tổng quan bài thi + +| Câu | Điểm | Tệp dữ liệu | Tệp kết quả | +| :---: | :---: | :---------: | :---------: | +| 1 | 5 | CAU1.INP | CAU1.OUT | +| 2 | 5 | CAU2.INP | CAU2.OUT | +| 3 | 5 | CAU3.INP | CAU3.OUT | +| 4 | 5 | CAU4.INP | CAU4.OUT | + +## Câu 1: Ước số + +Cho trước số nguyên dương n. + +### Yêu cầu + +Tìm số lượng các ước nguyên dương của n. + +### Dữ liệu + +Số nguyên dương n ≤ 10<sup>9</sup>. + +### Kết quả + +Số lượng các ước nguyên dương của n tìm được. + +### Ví dụ + +| CAU1.INP | CAU1.OUT | Giải thích | +| :------: | :------: | ------------------------------------------------ | +| 12 | 6 | 12 có 6 ước nguyên dương là 1, 2, 3, 4, 6 và 12. | + +## Câu 2: Chi tiết máy + +Tại phân xưởng sản xuất chi tiết máy có tổng số nguyên liệu là s (đơn vị khối +lượng). Quy trình sản xuất chi tiết máy được thực hiện như sau: + +1. Từ nguyên liệu, người ta tạo ra các phôi, mỗi phôi có khối lượng là k (đơn + vị khối lượng); +2. Từ mỗi phôi, người ta tạo ra *các* chi tiết máy, mỗi chi tiết có khối lượng + m (đơn vị khối lượng). + +Sau đó phần nguyên liệu dư khi sản xuất phôi và chi tiết máy sẽ được thu lại để +tiếp tục sản xuất theo quy trình trên. + +### Yêu cầu + +Tìm số chi tiết máy nhiều nhất có thể sản xuất được, + +### Dữ liệu + +3 số nguyên dương s, k và m, mỗi số ≤ 10<sup>9</sup>. + +### Kết quả + +Số chi tiết máy nhiều nhất có thể sản xuất được. + +### Ví dụ + +| CAU2.INP | CAU2.OUT | Giải thích | +| :------: | :------: | ---------------------------------------------------- | +| 13 5 3 | 3 | 13 nguyên liệu tạo 2 phôi, sản xuất được 2 chi tiết. | +| | | Dư 7 nguyên liệu, sản xuất thêm 1 chi tiết nữa. | +| | | Tổng cộng có 3 chi tiết được sản xuất. | + +## Câu 3: Tích lớn nhất + +Cho trước n số nguyên bất kì a<sub>1</sub>, a<sub>2</sub>, …, a<sub>n</sub>. + +### Yêu cầu + +Tìm 2 số trong n số đã cho có tích lớn nhất. + +### Dữ liệu + +* Dòng đầu chứa số nguyên dương n, 2 ≤ n ≤ 10<sup>4</sup>; +* Dòng sau chứa n số nguyên bất kì có giá trị tuyệt đối ≤ 10<sup>4</sup>. + +### Kết quả + +Tích hai số có giá trị lớn nhất. + +### Ví dụ + +| CAU3.INP | CAU3.OUT | Giải thích | +| ---------------- | :------: | ----------------------------------------- | +| 4<br>-2 -7 -15 2 | 105 | Hai số -7 và -15 có tích lớn nhất là 105. | + +## Câu 4: Xâu đối xứng + +Xâu kí tự s gọi là xâu đối xứng nếu viết các kí tự của S theo thứ tự ngược lại +ta nhận được chính xâu S. + +Cho trước xâu X gồm các chữ cái tiếng Anh in hoa. + +### Yêu cầu + +Tìm cách viết thêm ít kí tự nhất vào cuối xâu X để nhận được xâu đối xứng S. + +### Dữ liệu + +Xâu X có không quá 100 kí tự. + +### Kết quả + +* Dòng đầu ghi số kí tự ít nhất phải viết thêm vào cuối xâu X để nhận được xâu + đối xứng S. +* Dòng thứ hai ghi xâu đối xứng S nhận được. + +### Ví dụ + +| CAU3.INP | CAU3.OUT | Giải thích | +| :------: | --------- | ----------------------------------------------------- | +| ABB | 1<br>ABBA | Thêm `A` vào cuối xâu `ABB` được xâu đối xứng `ABBA`. | diff --git a/11/Q-2017/cau1.scm b/11/Q-2017/cau1.scm new file mode 100644 index 0000000..5e59c49 --- /dev/null +++ b/11/Q-2017/cau1.scm @@ -0,0 +1,8 @@ +(define (cau1 n i) + (cond ((> (* i i) n) 0) + ((= (* i i) n) 1) + ((= (remainder n i) 0) (+ (cau1 n (+ i 1)) 2)) + (else (cau1 n (+ i 1))))) +(with-input-from-file "CAU1.INP" (lambda () + (with-output-to-file "CAU1.OUT" (lambda () + (format #t "~a\n" (cau1 (read) 1)))))) diff --git a/11/Q-2017/cau2.scm b/11/Q-2017/cau2.scm new file mode 100644 index 0000000..8a9b00f --- /dev/null +++ b/11/Q-2017/cau2.scm @@ -0,0 +1,5 @@ +(define (cau2 s k m) (let* ((nk (quotient s k)) (nm (* (quotient k m) nk))) + (if (= nk 0) 0 (+ (cau2 (+ (remainder s k) (* (remainder k m) nk)) k m) nm)))) +(with-input-from-file "CAU2.INP" (lambda () + (with-output-to-file "CAU2.OUT" (lambda () + (format #t "~a\n" (cau2 (read) (read) (read))))))) diff --git a/11/Q-2017/cau3.scm b/11/Q-2017/cau3.scm new file mode 100644 index 0000000..31cd5c3 --- /dev/null +++ b/11/Q-2017/cau3.scm @@ -0,0 +1,7 @@ +(with-input-from-file "CAU3.INP" (lambda () + (with-output-to-file "CAU3.OUT" (lambda () + (define l (sort (let read-list ((n (read))) + (if (= n 0) '() (cons (read) (read-list (- n 1))))) <)) + (format #t "~a\n" + (max (* (list-ref l (- (length l) 1)) (list-ref l (- (length l) 2))) + (* (list-ref l 1) (list-ref l 0)))))))) diff --git a/11/Q-2017/cau4.scm b/11/Q-2017/cau4.scm new file mode 100644 index 0000000..b9438f5 --- /dev/null +++ b/11/Q-2017/cau4.scm @@ -0,0 +1,11 @@ +(with-input-from-file "CAU4.INP" (lambda () + (with-output-to-file "CAU4.OUT" (lambda () + (define x (list->string (let read-string ((c (read-char))) + (if (or (eof-object? c) (char-ci=? c #\newline)) + '() + (cons c (read-string (read-char))))))) + (let find-palin ((i 0)) + (if ((lambda (s) (string-ci=? (string-reverse s) s)) + (string-copy x i (string-length x))) + (format #t "~a\n~a~a\n" i x (string-reverse (string-copy x 0 i))) + (find-palin (+ i 1)))))))) |