From 2f674dc80f0382f1c3178f435714960734dc9d3c Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Sat, 6 Jun 2020 21:33:13 +0700 Subject: Reorganize stuff from secondary school --- .../README.md" | 67 ++++++++++++++++++++++ .../cau1.c" | 20 +++++++ .../cau2.c" | 39 +++++++++++++ .../cau3.c" | 40 +++++++++++++ .../cau4.c" | 26 +++++++++ 5 files changed, 192 insertions(+) create mode 100644 "2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" create mode 100644 "2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" create mode 100644 "2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" create mode 100644 "2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" create mode 100644 "2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" (limited to '2ndary/12/Q-VĩnhTường-2006') diff --git "a/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" "b/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" new file mode 100644 index 0000000..c96c99e --- /dev/null +++ "b/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/README.md" @@ -0,0 +1,67 @@ +# ĐỀ 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ố tự nhiên `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 (3 điểm) + +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/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" "b/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau1.c" new file mode 100644 index 0000000..173e7c2 --- /dev/null +++ "b/2ndary/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/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" "b/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau2.c" new file mode 100644 index 0000000..4ad1c3b --- /dev/null +++ "b/2ndary/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/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" "b/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau3.c" new file mode 100644 index 0000000..136f154 --- /dev/null +++ "b/2ndary/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/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" "b/2ndary/12/Q-V\304\251nhT\306\260\341\273\235ng-2006/cau4.c" new file mode 100644 index 0000000..d971927 --- /dev/null +++ "b/2ndary/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