You are on page 1of 17

CHỮA BÀI TẬP BUỔI 2

BÀI 2.1 - KHOẢNG CÁCH GIỮA HAI ĐIỂM - DISTANCE


Mô tả bài toán: Đọc bốn giá trị tương ứng với trục x và y
của hai điểm trong mặt phẳng, p1 (x1, y1) và p2 (x2, y2) và
tính khoảng cách giữa chúng, in ra với bốn chữ số thập
phân sau dấu phẩy, theo công thức :
Dữ liệu vào (DISTANCE.INP): Tệp nhập chứa hai dòng dữ liệu. Dòng đầu tiên chứa hai giá
trị số thực: x1 y1 và dòng thứ hai cũng chứa hai giá trị số thực với một chữ số sau dấu thập
phân: x2 y2.
Dữ liệu ra (DISTANCE.OUT): Tính và in giá trị khoảng cách sử dụng công thức được cung
cấp, với 4 chữ số thập phân.
DISTANCE.INP DISTANCE.OUT
1.0 7.0
4.4721
5.0 9.0
-2.5 0.4
16.1484
12.1 7.3
2.5 -0.4
16.4575
-12.2 7.0
CODE C++
CODE PYTHON

Cách 1 – Xử lí bằng phương thức đọc tệp read()

Cách 2 – Xử lí bằng phương thức đọc theo dòng bằng phương thức readline()

Cách 3 – Xử lí bằng phương thức đọc theo dòng cho tới khi hết file
BÀI 2.2 TÍNH TUỔI THEO SỐ NGÀY
Mô tả bài toán: Đọc một giá trị số nguyên tương ứng với độ tuổi của một người (tính theo
ngày) và in ra tuổi đã quy đổi thành năm, tháng và ngày, tiếp theo là thông báo tương ứng
"nam", "thang", "ngay".
Lưu ý: Đây chỉ là một bài tập nhằm mục đích kiểm tra khả năng tính toán toán học. Nên
để tạo thuận lợi cho tính toán, chúng ta giả thuyết rằng mỗi năm có đúng 365 ngày và mỗi
tháng có đúng 30 ngày.
Dữ liệu vào (TUOI.INP): Đầu vào gồm 1 giá trị số nguyên là số ngày tuổi.
Dữ liệu ra (TUOI.OUT): In ra tuổi đã quy đổi theo yêu cầu của đề bài.
TUOI.INP TUOI.OUT
400 1 nam 1 thang 5 ngay
800 2 nam 2 thang 10 ngay
30 0 nam 1 thang 0 ngay
Phân tích:
Để đổi sang năm thì ta thấy cứ 365 ngày tương ứng với 1 năm. Do đó để tính số năm
thì ta chỉ cần lấy tổng số ngày chia cho 365 lấy nguyên là được : [songay/365]. Sau khi
tính được số năm thì số ngày còn dư lại được tính bằng phép chia dư: songay%365.
Tương tự ta tính được số tháng và số ngày tuổi còn dư lại.

CODE C++
CODE PYTHON

BÀI 2.3 TIỀN ĐIỆN NHÀ DAN


Mô tả bài toán: Nhà DAN sẽ tính tiền điện như sau:
 Nếu số điện < 50 thì đơn giá sẽ là 100.
 Nếu số điện >= 50 và < 1000 thì đơn giá sẽ là 500.
 Nếu số điện >= 1000 và < 10000 thì đơn giá sẽ là 1000.
 Nếu số điện >= 10000 thì đơn gía là 1200.
Tháng này nhà DAN dùng hết n số điện, hãy tính tiền điện DAN phải trả. (0 ≤ 𝑛 ≤ 107).
Dữ liệu vào (TIENDIEN.INP): n số điện mà nhà Dan đã dùng.
Dữ liệu ra (TIENDIEN.OUT): Số tiền mà nhà Dan phải trả.
TIENDIEN.INP TIENDIEN.OUT
10 1000
Phân tích Dựa theo sơ đồ tính tiền sau:
0 50 1000 10000

100đ/ 1 số 500đ / 1số 1000đ/ 1 số 1200đ/ 1số


CODE C++
CODE PYTHON

BÀI 2.4 Ổ CẮM ĐIỆN - POWER SOCKET


Mô tả bài toán: Cuối cùng, nhóm từ trường đại học đã có đủ điều kiện để tham dự vòng
chung kết của Marathon Lập trình SBC. Ba thành viên của đội và huấn luyện viên của họ
đại diện cho trường đại học, chuẩn bị cho chuyến đi của họ đến São Paulo, nơi sẽ được tổ
chức các trận chung kết.
Họ sẽ mang theo tất cả các thiết bị điện tử: điện thoại di động, máy tính bảng, máy tính
xách tay, modem wifi, máy ảnh, … và sẽ cần một số ổ điện để kết nối tất cả các thiết bị này.
Họ được cho biết rằng bốn người sẽ ở cùng phòng khách sạn, nhưng được thông báo rằng
trong mỗi phòng chỉ có một ổ cắm điện có sẵn. Ba thành viên của đội và huấn luyện viên
đã mua mỗi người một dây cắm điện, để nối chung vào ổ cắm phòng khách sạn; Chúng
cũng có thể được nối với nhau để tăng thêm số lượng các thiết bị sử dụng. Bạn hãy viết
một chương trình, xác định số lượng thiết bị tối đa có thể được cắm nguồn cùng lúc.
Dữ liệu vào (OCAM.INP): bốn số nguyên T1 , T2 , T3 , T4 , là số đầu ra của mỗi dây cắm (2
≤ Ti ≤ 6).
Dữ liệu ra (OCAM.OUT): số lượng thiết bị tối đa có thể được cắm nguồn trong cùng một
thời điểm.
OCAM.INP OCAM.OUT
2 4 3 2 8
6 6 6 6 21
2 2 2 2 5
Phân tích : Dễ nhận thấy tổng số thiết bị tối đa có thể được cắm nguồn chính là tổng số ổ cắm
trên các dây cắm của 4 người sau khi trừ đi 4 ổ cắm(01 ổ ở trên tường trong phòng) được dùng
để cấp nguồn cho 4 dây cắm này. Vậy công thức tính là: (T1 + T2 + T3 + T4) − 3
CODE C++

CODE Python

BÀI 2.5 GHÉP ĐÔI - PAIRING


Mô tả bài toán: Vì thấy lớp Tin học của mình hơi trầm nên Nobita quyết định tổ chức trò
chơi ghép đôi cho các bạn cùng lớp. Vì số lượng giữa trai và gái trong lớp không thể đều
nhau được thậm chí là có thể lệch nhau khá nhiều. Nobita muốn ghép đôi sao cho được
nhiều cặp 1 nam 1 nữ nhất có thể. Nếu không được thì đồng giới đành phải ghép đôi với
nhau. Nobita là người tính toán rất chậm. Bạn hãy giúp Nobita xem lớp của Nobita sẽ ghép
được mấy cặp "1 nam 1 nữ" và mấy cặp đồng giới.
Dữ liệu vào (PAIRING.INP): 1 dòng duy nhất chứa 2 số nguyên x,y (0 ≤ x, y ≤ 100) với x là số
lượng nam, y là số lượng nữ trong lớp Nobita.
Dữ liệu ra (PAIRING.OUT): In ra 2 số nguyên. Số nguyên đầu tiên là số căp "1 nam 1 nữ". Số
nguyên thứ 2 là số cặp đồng giới. Mỗi giá trị phân biệt nhau bởi một dấu cách.
PAIRING.INP PAIRING.OUT Diễn giải kết quả
3 1 1 1 1 cặp nam nữ, 1 cặp đồng giới
2 3 2 0 2 cặp nam nữ, 0 cặp đồng giới
7 3 3 2 3 cặp nam nữ, 2 cặp đồng giới

Phân tích : Dễ thấy để ghép được 1 cặp khác giới thì cần 1 nam 1 nữ, nên số cặp khác giới sẽ
bằng min(nam, nữ). Sau khi ghép xong khác giới thì sẽ còn dư (hoặc không nếu số nam bằng số
nữ) số người cùng giới (hoặc nam, hoặc nữ) là: max(nam, nữ) – min(nam, nữ).
BÀI 2.6 - THỜI GIAN CÒN LẠI - Time remaining
Mô tả bài toán: Vincent rất thích các cuộc thi lập trình. Ngày hôm nay, anh ấy sẽ tham gia
một cuộc thi ở laptrinhonline.club. Ở Việt Nam sử dụng đồng hồ 24h để hiển thị thời gian.
Ví dụ 9h00pm tương ứng với 21h00. Cho biết thời gian hiện tại là A giờ và cuộc thi sẽ bắt
đầu đúng chính xác B giờ nữa. Nhiệm vụ của bạn là hãy cho biết khi nào cuộc thi bắt đầu ?
Dữ liệu vào (TIME.INP): dòng duy nhất gồm 2 số nguyên A,B ( 0 ≤ A,B ≤ 23).
Dữ liệu ra (TIME.OUT): In ra thời gian cuộc thi bắt đầu.
TIME.INP TIME.OUT Diễn giải kết quả
9 12 21 Hiện tại là 9h00 sau 12h nữa là 21h00
23 2 1 Hiện tại là 23h00 sau 1h nữa là 1h00

Phân tích: Ta thấy:


 Nếu A + B < 24 thì thời gian cuộc thi bắt đầu là: A+B
 Nếu A+ B = 24 thì thời gian bắt đầu là 0 (tức 0h)
 Nếu A + B > 24 thì thời gian bắt đầu là: (A+B)-24

CODE C++
CODE Python

BÀI 2.7 TỌA ĐỘ CỦA MỘT ĐIỂM - LOCATION


Mô tả bài toán: Viết chương trình nhập hai giá trị thực (x và y) là tọa độ của một điểm trong
một mặt phẳng toạ độ vuông góc Đề-Các. Bạn hãy xác định xem điểm đó thuộc về góc tọa
độ nào, hoặc nếu bạn nằm trên trục X hoặc Y, hoặc gốc (x = y = 0).
 Nếu điểm là ở gốc toạ độ, hãy viết thông điệp "Origem".
 Nếu điểm nằm trên trục X viết "Eixo X", nếu điểm trên trục Y viết
"Eixo Y".
 Nếu không viêt Q1... Q4 tùy theo điểm thuộc góc phần tư nào?
Dữ liệu vào (LOCATION.INP): tọa độ của một điểm.
Dữ liệu ra (LOCATION.OUT): Đầu ra nên hiển thị góc tọa độ chứa điểm có tọa độ nói trên.
LOCATION.INP LOCATION.OUT
4.5 -2.2 Q4
0.1 0.1 Q1
0.0 0.0 Origem

Phân tích: Ta thấy:


 Nếu x > 0 và y > 0 thì điểm đã cho nằm ở phần Q1
 Nếu x < 0 và y > 0 thì điểm đã cho nằm ở phần Q2
 Nếu x < 0 và y < 0 thì điểm đã cho nằm ở phần Q3
 Nếu x > 0 và y < 0 thì điểm đã cho nằm ở phần Q4
 Nếu x = 0 và y ≠ 0 thì điểm đã cho nằm trên trục tung Eixo Y
 Nếu x ≠ 0 và y == 0 thì điểm đã cho nằm trên trục hoành Eixo X
 Nếu x = 0 và y = 0 thì điểm đã cho nằm chính ở gốc toạ độ (0,0) - Origem
Bài này dễ nên thầy chỉ code bằng Python, C++ tự code nhá
BÀI 2.8 KHÁCH SẠN - HOTEL
Mô tả bài toán: Rambo có một chuyến du lịch đến Việt Nam và ở đây anh ta đã tìm được
một cái Hotel để nghỉ trong vòng N ngày. Cách tính chi phí của Hotel này như sau:
 X vnđ cho một ngày đối với K ngày đầu tiên
 Y vnđ cho một ngày từ ngày thứ K + 1 đến ngày cuối cùng.
Hãy giúp Rambo tính chi phí phải trả để nghỉ ở Hotel trong N ngày nhé
Dữ liệu vào (HOTEL.INP): gồm 4 số nguyên N, K, X, Y với và (1 ≤ N,K ≤ 10000; 1 ≤ X ,Y ≤
10000;).
Dữ liệu ra (HOTEL.OUT): là tổng chi phí cần phải trả của Rambo
HOTEL.INP HOTEL.OUT Diễn giải kết quả
3 ngày đầu phải trả mỗi ngày là 10000 và 2 ngày
5 3 10000 9000 48000 tiếp theo phải trả mỗi ngày là 9000
2 3 10000 9000 20000

Phân tích:

1 ngày giá X đồng K 1 ngày giá Y đồng (từ ngày thứ K+1)
BÀI 2.9 ĐẾM MÀU VỎ LON MONSTER ENERGY- CANS
Mô tả bài toán: Monster Energy là một loại nước tăng lực khá nổi tiếng, Rambo là một
người rất mê loại nước này vì nó rất ngon và vỏ lon có rất nhiều màu sắc khác nhau rất bắt
mắt.
Anh ta đã mua một lon có màu là A ngày hôm kia, một lon có màu là B ngày hôm
qua và hôm nay anh ta mua một lon có màu là C. Màu của các lon trong khoảng từ 1 đến
100.Vì anh ta đã quên mất mình đã mua bao nhiêu lon khác màu nhau nên bạn hãy giúp
anh ta đếm số lon khác màu nhau nhé.
Dữ liệu vào (CANS.INP): gồm 3 số nguyên A, B, C với (1 ≤ A, B, C ≤ 100).
Dữ liệu ra (CANS.OUT): Số màu lon Monster Energy mà Rambo đã mua
CANS.INP CANS.OUT
315 3
4 4 10 2

Phân tích: Ta so sánh 3 giá trị a, b, c để xem số màu đã mua


Số màu = 1 khi : a = b = c
Số màu = 2 khi: Hoặc (a≠b và a=c) hoặc(a = b và a≠c) hoặc (b=c và b≠a)
Số màu = 3 khi: đồng thời : a ≠ b và b ≠ c và a ≠ c
BÀI 2.10 - CHIA KẸO - SPLIT CANDY
Mô tả bài toán: Hai thằng em trời đánh của Rambo đang tranh nhau với những túi kẹo và
chính xác hơn là có 3 túi, mỗi túi sẽ có lần lượt là A, B, C cái kẹo. Thấy vậy Rambo liền cố
gắng chia đều chỗ kẹo đó cho 2 người em của mình để chúng khỏi tranh nhau. Tuy nhiên
Rambo không được phép bóc gói kẹo ra và toàn bộ gọi số kẹo trong gói phải đưa cho một
trong 2 đứa em. Hãy giúp Rambo chia kẹo sao cho mỗi người em có số kẹo bằng nhau.
Dữ liệu vào (CANDY.INP): gồm 3 số nguyên A, B, C là số kẹo của mỗi túi (1 ≤ A, B, C ≤ 100)
Dữ liệu ra (CANDY.OUT): In ra "Yes" nếu có thể chia đều kẹo cho 2 người em và "No" nếu
không thể.
CANDY.INP CANDY.OUT
10 30 20 Yes
30 30 100 No

Phân tích: Dễ thấy có 3 gói kẹo mà chia cho hai người với điều kiện không được bóc và số kẹo hai
người phải bằng nhau thì chỉ có thể chia được khi mà tổng của hai gói kẹo bằng gói còn lại, ngoài
ra thì không thể chia được.
BÀI 2.11 POINT
Tèo là một học sinh chăm ngoan, rất yêu thích môn Toán và môn Tin học.
Khi học về hàm số bậc nhất: 𝑦 = 𝑎𝑥 + 𝑏 (𝑎, 𝑏 là các số cho trước và 𝑎 ≠ 0) . Tèo được biết đồ
thị của hàm bậc nhất là một đường thẳng. Trong lúc học, Tèo chợt nghĩ ra 4 số nguyên 𝑎1 𝑏1 𝑎2
𝑏2 (các số đều khác 0 và có giá trị tuyệt đối không quá 32000). Với 4 số nguyên này, Tèo có được
hai đường thẳng: 𝑦1 = 𝑎1 𝑥 + 𝑏1 𝑣à 𝑦2 = 𝑎2 𝑥 + 𝑏2 . Không cần vẽ đồ thị, Tèo muốn biết hai
đường thẳng đó có điểm chung hay không.
Yêu cầu: Em hãy lập trình để máy tính đọc vào 4 số 𝑎1 𝑏1 𝑎2 𝑏2 và trả lời câu hỏi của Tèo.
Dữ liệu vào từ tệp Point.inp gồm 2 dòng
 Dòng đầu tiên chứa 2 số nguyên 𝑎1 𝑏1
 Dòng thứ 2 chứa 2 số nguyên 𝑎2 𝑏2
Các số trên cùng dòng phân biệt nhau bởi dấu cách.
Dữ liệu ra: ghi vào tệp Point.out câu trả lời yes/ no
POINT.inp POINT.out
3 -2 yes
-4 1

Phân tích: Theo toán học ta có: 𝑦1 = 𝑎1 𝑥 + 𝑏1 𝑣à 𝑦2 = 𝑎2 𝑥 + 𝑏2 cắt nhau khi 𝑎1 ≠ 𝑎2


BÀI 2.12 BÓC TRỨNG
Cửa hàng yêu thích của Ben bán quả trứng đồ chơi.. Ben biết rằng chính xác có sticker và món
đồ chơi được đặt trong tổng số quả trứng. Mỗi một quả trứng có thể là một trong ba loại:
 Nó có thể chứa một sticker và không có đồ chơi;
 Nó có thể chứa một món đồ chơi và không có sticker;
 Nó có thể chứa một sticker và một món đồ chơi.
Nhưng Ben không biết trong số trứng của của hàng có cụ thể những loại nào. Tất cả trứng trông
giống hệt nhau và không thể phân biệt được với nhau. Vấn đề ở đây là số lượng quả trứng tối
thiểu Ben phải mua là bao nhiêu để chắc chắn rằng cho dù chúng là loại nào, Ben sẽ nhận được
ít nhất một sticker và ít nhất một món đồ chơi?
Lưu ý rằng: Ben không mở quả trứng trong quá trình mua( Ben chỉ được mua với số lượng trứng
đã định trước).
Dữ liệu đầu vào: từ tệp EGGS.inp gồm 1 dòng duy nhất chứa 3 số nguyên n, s, t với điều kiện
ràng buộc là: 1 ≤ 𝑛 ≤ 109 ; 1 ≤ 𝑠, 𝑡 ≤ 𝑛 ; 𝑠 + 𝑡 ≥ 𝑛
Dữ liệu đầu ra ghi vào tệp EGGS.out một số nguyên duy nhất là số lượng trứng tối thiểu Ben
phải mua để đảm bảo rằng, dù là loại nào, Ben sẽ nhận được ít nhất một sticker và một món đồ
chơi.
EGGS.INP EGGS.OUT
524 4
735 5
Phân tích: Dễ nhận thấy với điều kiện rằng 1 ≤ 𝑠, 𝑡 ≤ 𝑛 ; 𝑠 + 𝑡 ≥ 𝑛 thì ta thấy một số điều như
sau:
- Nếu s > t thì ta phải bốc tối thiểu số trứng là n – s để có chắc chắn có sticker
- Nếu s < t thì ta phải bốc tối thiểu số trứng là n – t để có chắc chắn có đồ chơi
Vậy nên số trứng tối thiểu phải bóc để chắc chắn có một trong hai loại hoặc sticker hoặc
đồ chơi là: n – min(s,t)
Sau khi chắc chắn có 1 loại là sticker hoặc đồ chơi rồi thì ta chỉ cần bốc thêm 1 quả từ chỗ
trứng còn lại là chắc chắn sẽ có được cả hai loại sticker và đồ chơi.
Vậy công thức là: sotrung = n – min(s,t) + 1
0 n
n – min(s,t) min(s,t)

You might also like