Thực hành 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 17. Thực hành lập trình giải bài toán trên máy tính.
Câu F86
Chia kẹo. Xét bài toán: Đội Trúc Xanh gồm 3 bạn An, Thuỳ và Minh đứng đầu trong cuộc thi về ca dao, tục ngữ Việt Nam. Cách trao giải của Ban tổ chức cũng khá độc đáo. Trên bàn bày một dãy n túi kẹo, trên túi kẹo thứ i có ghi số nguyên ai, là số lượng kẹo trong túi (ai ≥ 0). Đội thắng cuộc được phép chọn các túi kẹo có số lượng chia hết cho 3. Đội Trúc Xanh quyết định sẽ chọn hết tất cả các túi có kẹo và được phép lấy. Sau đó từ mỗi túi, mỗi người ăn một chiếc kẹo. Phần kẹo còn lại được tập trung và chia đều để mỗi bạn mang về cho em ở nhà. Hãy xác định, mỗi bạn đã ăn bao nhiêu cái kẹo và mang về nhà bao nhiêu cái.
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 (1 ≤ n ≤ 105).
– Dòng thứ hai chứa n số nguyên a1, a2,…, an (0 ≤ ai ≤ 104, i = 1, 2, …, n)
Kết quả: Đưa ra thiết bị ra chuẩn hai số nguyên là số lượng kẹo tương ứng với số kẹo mỗi bạn đã ăn và số kẹo mỗi bạn mang về, các số đưa ra trên cùng một dòng.
Ví dụ:
Input | Output |
9 25 16 11 12 14 0 8 30 21 | 3 18 |
Đáp án:
Tóm tắt bài toán (Mô hình toán học)
Cho:
– Số nguyên n, (1 ≤ n ≤ 105) và n số nguyên a1, a2,.., an (0 ≤ ai ≤ 104, i = 1, 2, .., n).
Yêu cầu:
– Xác định k là số lượng ai lớn hơn 0 và chia hết cho 3.
– Tính tổng (ai – 3)/3 với các ai tìm được.
Thuật toán và cách tổ chức dữ liệu
– Bước 1. Nhập dữ liệu vào (dùng kiểu danh sách cho dãy n số nguyên).
– Bước 2. Chuẩn bị tích luỹ số lượng và tổng: k = 0, s = 0.
– Bước 3. Duyệt với mọi i: Nếu ai > 0 và ai chia hết cho 3 thì tăng k và tích luỹ ai vào s.
– Bước 4. Đưa ra k và (s – 3k)/3.
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(x) for x in input().split()]
k = 0
s = 0
for x in a:
if x > 0 and x % 3 == 0:
k = k + 1
s = s + x
print(k, s/3 - k, sep=('\n'))
fo.close()
Câu F87
Điểm dừng xe. Xét bài toán: Các điểm dừng đón, trả khách của xe buýt cách đều nhau một đoạn k mét. Điểm dừng đầu tiên ở đầu phố. Như vậy tính từ đầu phố, xe buýt dừng ở các điểm 0, k, 2k, 3k, … (mét). Nhà của Tâm ở ngay đầu phố. Để kết hợp rèn luyện thể lực, Tâm thường đi bộ tới trường. Hôm nay, khi đi bộ được n mét, Tâm chợt nhớ cần phải tới sớm theo lời hẹn với một người bạn nên quyết định sẽ bắt xe buýt ở trạm tiếp theo gần nhất. Hãy xác định Tâm còn phải đi thêm bao nhiêu mét nữa.
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 k, dòng thứ hai chứa số nguyên n (1 ≤ k, n ≤ 2 × 109).
Kết quả: Đưa ra thiết bị ra chuẩn một số nguyên là độ dài đoạn đường cần đi tiếp (tính theo mét).
Ví dụ:
Input | Output |
800 2 100 | 300 |
Đáp án:
Tóm tắt bài toán (Mô hình toán học)
Cho:
– Các điểm (được đánh dấu) cách đều nhau k mét.
– Điểm đầu có toạ độ là 0.
– Điểm x có toạ độ là n.
Yêu cầu: Xác định khoảng cách gần nhất từ điểm x tới một điểm được đánh dấu.
Thuật toán và cách tổ chức dữ liệu:
Bước 1. Nhập số nguyên k và n.
Bước 2. Tính d là khoảng cách từ x tới điểm bên trái của x.
Bước 3. Tìm min của khoảng cách từ x tới điểm bên trái x và bên phải của x.
Bước 4. Đư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
k, n = int(input()), int(input())
d = n%k
if d > k - d: d = k - d
print(d)
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.