Đề Thi Học Sinh Giỏi Cấp Huyện – Môn Tin học THCS_Đề 2

ĐỀ 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


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 <= 3: return 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 <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
void sangnguyento(long long int n, bool nguyento[])
{
    nguyento[0] = false;
    nguyento[1] = false;
        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 = "; cin >> 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 <long long int> 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);
            }
    }
        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')

Bài 2: (6,0đ)

#include <iostream>
#include <bits/stdc++.h>
#include <vector>
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 = "; cin >> a;
    cout << "b = "; cin >> 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;
        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 <iostream>
#include <bits/stdc++.h>
#include <vector>
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;
        S1 = "";
        for (char kt : S)
            if (kt < '0' || 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
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 <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int s[10006], n, i;
int main()
{
    cout << "n = "; cin >> 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;
    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;
}

 

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Dark mode