From 7de121c4b4ef888a0d1990c27144a7f9dd8c5f94 Mon Sep 17 00:00:00 2001 From: Raphael McSinyx Date: Sun, 6 Nov 2016 11:13:14 +0700 Subject: Thêm đề HSG 12 huyện Vĩnh Tường, Vĩnh Phúc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 72 ++++++++++++++++++++++ .../cau1.c" | 20 ++++++ .../cau2.c" | 39 ++++++++++++ .../cau3.c" | 40 ++++++++++++ .../cau4.c" | 26 ++++++++ 5 files changed, 197 insertions(+) create mode 100644 "12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" create mode 100644 "12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" create mode 100644 "12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" create mode 100644 "12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" create mode 100644 "12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" (limited to '12/Q-VĩnhTường-2006') diff --git "a/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" new file mode 100644 index 0000000..a4c8dad --- /dev/null +++ "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" @@ -0,0 +1,72 @@ +# ĐỀ THI HSG LỚP 12 HUYỆN VĨNH TƯỜNG NĂM HỌC 2006-2007 + +Môn: Tin học +Thời gian: 150 phút (không kể thời gian giao đề). + +## Câu 1 (5 điểm) + +Nhập vào một số nhị phân có `n` chữ số (`n` < 100). Hãy in ra số dư khi chia số +đó cho 3. + +Ví dụ: + +n | Số nhị phân | Kết quả +-- | --------------- | ------- +3 | 101 | 2 +8 | 10100111 | 2 +12 | 100000001101 | 0 +14 | 11001111101110 | 1 +6 | 111111 | 0 +15 | 111111111111110 | 0 + +## Câu 2 (4 điểm) + +Nhập vào số nguyên dương `n`. Hãy in ra số nguyên tố nhỏ nhất lớn hơn `n`. + +Ví dụ: + + n | Kết quả +---- | ------- +10 | 11 +7 | 11 +44 | 47 +992 | 997 +2332 | 2333 + +## Câu 3 (8 điểm) + +Nhập vào từ số nguyên dương `n` (`n` < 1000). + +1. Phân tích `n` thành tích các thừa số nguyên tố. +2. Tìm các số tự nhiên nhỏ hơn hoặc bằng `n` mà sau khi làm phép phân tích ở + phần 1 có nhiều nhân tử nhất. + +Ví dụ: + + n | Kết quả +--- | ------- +9 | 3 3 + | 8 +15 | 3 5 + | 8 12 +21 | 3 7 + | 16 +70 | 2 5 7 + | 64 +150 | 2 3 5 5 + | 128 + +## Câu 4 + +Nhập vào một mảng gồm `n` (`n` < 20) số nguyên dương. Hãy đếm xem trong mảng có +bao nhiêu số bậc thang. Biết một số được gọi là số bậc thang nếu biểu diễn thập +phân của nó có nhiều hơn một chữ số đồng thời theo chiều từ trái qua phải, chữ +số đứng sau không nhỏ hơn chữ số đứng trước. + +Ví dụ: + +n | Dãy số | Kết quả +- | ------------------------ | ------- +7 | 1 4 7 5 8 9 3 | 0 +5 | 123 102 10023 9 21 | 1 +6 | 115 110 11112 31 14 1109 | 3 diff --git "a/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" new file mode 100644 index 0000000..173e7c2 --- /dev/null +++ "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" @@ -0,0 +1,20 @@ +#include +#include + +int main() +{ + char b[100], i; + short a = 0; + + scanf("%s", b); + + for (i = strlen(b) - 1; i >= 0; i -= 2) + a += b[i] - 48; + + for (i = strlen(b) - 2; i >= 0; i -= 2) + a += b[i] * 2 - 96; + + printf("%d\n", a % 3); + + return 0; +} diff --git "a/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" new file mode 100644 index 0000000..4ad1c3b --- /dev/null +++ "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" @@ -0,0 +1,39 @@ +#include +#include + +char prime(unsigned long long m) +{ + unsigned long i; + + for (i = 3; i <= sqrt(m); i += 2) + if (m % i == 0) + return 0; + + return 1; +} + +int main() +{ + unsigned long long n, i; + + scanf("%lld", &n); + + if (n == 1) { + puts("2"); + + return 0; + } + + i = (n % 2) ? n : n - 1; + + while (i <= 18446744073709551615ULL) { + i += 2; + + if (!prime(i)) + continue; + + printf("%lld\n", i); + + return 0; + } +} diff --git "a/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" new file mode 100644 index 0000000..136f154 --- /dev/null +++ "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" @@ -0,0 +1,40 @@ +#include +#include + +const char PRIMES[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}; + +int main() +{ + char i; + short n, n0; + + scanf("%hd", &n); + + if (n < 2) { + printf("\n%hd\n", n); + + return 0; + } + + n0 = n; + + for (i = 0; i < 11; i++) + while (n0 % PRIMES[i] == 0) { + n0 /= PRIMES[i]; + printf("%hd ", PRIMES[i]); + } + + if (n0 - 1) + printf("%hd\n", n0); + else + putchar(10); + + n0 = pow(2, (int) log2(n) - 1); + + if (n0 * 3 > n) + printf("%hd\n", n0 * 2); + else + printf("%hd %hd\n", n0 * 2, n0 * 3); + + return 0; +} diff --git "a/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" new file mode 100644 index 0000000..d971927 --- /dev/null +++ "b/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" @@ -0,0 +1,26 @@ +#include +#include + +int main() +{ + char n, count = 0, s[21], c, i; + unsigned long long m; + + for (n = 1; n < 20 && scanf("%lld", &m) != EOF; n++) { + if (m < 10) + continue; + + sprintf(s, "%lld", m); + c = s[0]; + + for (i = 1; i < strlen(s) && c; i++) + c = (c > s[i]) ? 0 : s[i]; + + if (c) + count++; + } + + printf("%hhd\n", count); + + return 0; +} -- cgit 1.4.1