Lập trình giải bài toán trên máy tính SBT Tin Học lớp 10 – Cánh Diều, mời các em tham khảo cùng Bumbii.
Chủ đề F. Giải quyết vấn đề với sự trợ giúp của máy tính. Bài 18. Lập trình giải bài toán trên máy tính.
Câu F88
Số bị thiếu
Tâm nhờ một người bạn tạo dãy số nguyên dương a1, a2, …, an với 1 ≤ ai ≤ n , i = 1, 2, …, n và các số khác nhau từng đôi một để làm dữ liệu đầu vào kiểm thử một chương trình mới viết. Khi nhận được kết quả, Tâm phát hiện ra bạn mình chỉ gửi có n – 1 số, các số nhận được thoả mãn những yêu cầu đã nêu. Tâm cần xác định số bị thiếu để có dữ liệu cần thiết.
Em hãy lập trình giải bài toán trên. Trước khi lập trình cần tóm tắt bài toán, xác định thuật toán và cách tổ chức dữ liệu.
Dữ liệu: Nhập vào từ thiết bị vào chuẩn, dòng đầu tiên chứa số nguyên n, (3 ≤ n ≤ 106), dòng thứ 2 chứa n – 1 số nguyên dương a1, a2, …, an thoả mãn các ràng buộc đã nêu, các số cách nhau một dấu cách.
Kết quả: Đưa ra thiết bị ra chuẩn số nguyên còn thiếu.
Ví dụ:
Input | Output |
5 2 5 1 4 | 3 |
Đáp án:
Tóm tắt bài toán (Mô hình toán học)
Cho: n và n – 1 số nguyên a1, a2, …, an-1. Trong đó ai ≠ aj, với i ≠ j, 1 ≤ ai ≤ n với mọi i.
Yêu cầu: Tìm số bị thiếu không vượt quá n.
Thuật toán và cách tổ chức dữ liệu
Nếu có đầy đủ n số thì tổng các số sẽ là
Vậy số còn thiếu là:
Không cần phải dùng dãy để lưu các số nhập vào.
Các bước của thuật toán:
– Bước 1. Nhập n.
– Bước 2. Nhập và tính tổng các ai
– Bước 3. Đưa ra kết quả.
Tham khảo chương trình sau:
import sys
fi = open("input.txt", encoding="utf-8")
fo = open("output.txt", "w", encoding="utf-8")
sys.stdin = fi
sys.stdout = fo
n = int(input())
t = 0
for i in input().split(): t = t + int(i)
print(n* (n+1)//2 - t)
fo.close()
Câu F89
Trung vị
Xét bài toán: Cho dãy số nguyên A = (a1, a2, …, an). Phần tử x của dãy được gọi là phần tử trung vị nếu nó lớn hơn hoặc bằng phần tử của dãy và nhỏ hơn hoặc bằng các phần tử còn lại trong dãy. Ví dụ, với A = (8, 1, 6, 3, 9, 2, 3, 1, 7) trung vị là phần tử có giá trị là 5. Tìm và đưa ra giá trị của phần tử trung vị của dãy A bất kì.
Em hãy lập trình giải bài toán trên. Trước khi lập trình cần tóm tắt bài toán, xác định thuật toán và cách tổ chức dữ liệu. Khi viết xong chương trình thì đề xuất ít nhất thêm hai bộ dữ liệu để kiểm thử chương trình.
Dữ liệu: Nhập vào từ thiết bị vào chuẩn một dòng chứa các phần tử của dãy, các số cách nhau một dấu cách.
Kết quả: Đưa ra thiết bị ra chuẩn giá trị của phần tử trung vị của dãy.
Ví dụ:
Input | Output |
8 1 6 5 9 2 3 1 7 | 5 |
Đáp án:
Tóm tắt bài toán (Mô hình toán học)
Cho: Dãy A gồm n số nguyên.
Yêu cầu: Đưa ra phần tử trung vị (phần tử nằm ở giữa dãy đã sắp xếp).
Thuật toán và chọn kiểu dữ liệu cho các biến
Bước 1. Nhập số nguyên n, nhập danh sách A chứa n số nguyên.
Bước 2. Sắp xếp danh sách A.
Bước 3. Đưa ra phần tử A [len (A) //2].
Tham khảo chương trình sau:
import sys
fi = open("input.txt", encoding="utf-8")
fo = open("output.txt", "w", encoding="utf-8")
sys.stdin = fi
sys.stdout = fo
n = int(input())
A = [int(i) for i in input().split()]
sorted(A)
print(A[len(A)//2])
fo.close()
Câu F90
Lớp II. Các nhà thiên văn phân loại đối tượng trên vùng trời đang nghiên cứu theo cường độ bức xạ Gamma của chúng. Đối tượng thứ i có cường độ bức xạ gi, (gi là số thực và lớn hơn 0, i= 1, 2, …, n). Các đối tượng được phân thành từng lớp: lớp I gồm các đối tượng có cùng cường độ bức xạ Gamma lớn nhất; lớp II gồm các đối tượng có cùng cường độ bức xạ Gamma lớn thứ hai, …
Xác định số lượng đối tượng lớp II và cường độ bức xạ Gamma của đối tượng thuộc lớp này.
Em hãy lập trình giải bài toán trên. Trước khi lập trình cần tóm tắt bài toán, xác định thuật toán và cách tổ chức dữ liệu. Khi viết xong chương trình thì đề xuất thêm ít nhất hai bộ dữ liệu để kiểm thử chương trình.
Dữ liệu: Nhập vào từ thiết bị vào chuẩn gồm một dòng chứa các số thực dương g1, g2, …, gn.
Kết quả: Đưa ra thiết bị ra chuẩn trên một dòng, mỗi số cách nhau một dấu cách, số thứ nhất là số nguyên xác định số lượng đối tượng thuộc lớp II, số thứ hai là số thực xác định cường độ bức xạ của lớp II.
Ví dụ:
Input | Output |
1.5 2.63 1.04 4.12 2.63 4.12 2.63 | 3 2.63 |
Đáp án:
Tóm tắt bài toán (Mô hình toán học)
Cho n số thực dương dương g1, g2, …, gn.
Yêu cầu: tìm giá trị lớn thứ hai của dãy số và số phần tử đạt giá trị này.
Thuật toán 1 và cách tổ chức dữ liệu
Bước 1. Nhập dữ liệu, lưu theo chỉ số bắt đầu từ 0 (dùng kiểu danh sách để chứa dãy số).
Bước 2. Sắp xếp dãy số theo thứ tự giảm dần.
Bước 3. Đếm số phần tử đạt max → k.
Bước 4. Đếm số phần tử có giá trị đạt gk
Bước 5. Đưa ra các giá trị tìm được.
Tham khảo chương trình sau:
import sys
fi = open("input.txt", encoding="utf-8")
fo = open("output.txt", "w", encoding="utf-8")
sys.stdin = fi
sys.stdout = fo
g = [float(i) for i in input().split()]
g = sorted(g, reverse = True)
k = g.count(g[0])
res2 = g[k]
res1 = g.count(res2)
print(res1, res2)
fo.close()
Xem thêm các bài khác tại Giải Sách bài tập Tin học Lớp 10 – Cánh Diều
Thông tin liên hệ & mạng xã hội:
Website: https://bumbii.com/
Facebook: https://www.facebook.com/bumbiiapp
Pinterest: https://www.pinterest.com/bumbiitech
Không bao giờ từ bỏ hy vọng. Cố gắng mỗi ngày.