about summary refs log tree commit diff
path: root/2ndary/12/Q-VĩnhTường-2006
diff options
context:
space:
mode:
Diffstat (limited to '2ndary/12/Q-VĩnhTường-2006')
-rw-r--r--2ndary/12/Q-VĩnhTường-2006/README.md67
-rw-r--r--2ndary/12/Q-VĩnhTường-2006/cau1.c20
-rw-r--r--2ndary/12/Q-VĩnhTường-2006/cau2.c39
-rw-r--r--2ndary/12/Q-VĩnhTường-2006/cau3.c40
-rw-r--r--2ndary/12/Q-VĩnhTường-2006/cau4.c26
5 files changed, 192 insertions, 0 deletions
diff --git a/2ndary/12/Q-VĩnhTường-2006/README.md b/2ndary/12/Q-VĩnhTường-2006/README.md
new file mode 100644
index 0000000..c96c99e
--- /dev/null
+++ b/2ndary/12/Q-VĩnhTường-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<br>8       |
+|  15  | 3 5<br>8 12    |
+|  21  | 3 7<br>16      |
+|  70  | 2 5 7<br>64    |
+| 150  | 2 3 5 5<br>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ĩnhTường-2006/cau1.c b/2ndary/12/Q-VĩnhTường-2006/cau1.c
new file mode 100644
index 0000000..173e7c2
--- /dev/null
+++ b/2ndary/12/Q-VĩnhTường-2006/cau1.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <string.h>
+
+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ĩnhTường-2006/cau2.c b/2ndary/12/Q-VĩnhTường-2006/cau2.c
new file mode 100644
index 0000000..4ad1c3b
--- /dev/null
+++ b/2ndary/12/Q-VĩnhTường-2006/cau2.c
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <math.h>
+
+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ĩnhTường-2006/cau3.c b/2ndary/12/Q-VĩnhTường-2006/cau3.c
new file mode 100644
index 0000000..136f154
--- /dev/null
+++ b/2ndary/12/Q-VĩnhTường-2006/cau3.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <math.h>
+
+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ĩnhTường-2006/cau4.c b/2ndary/12/Q-VĩnhTường-2006/cau4.c
new file mode 100644
index 0000000..d971927
--- /dev/null
+++ b/2ndary/12/Q-VĩnhTường-2006/cau4.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <string.h>
+
+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;
+}