Tin học C++

Tiến huân

Học sinh mới
Thành viên
11 Tháng bảy 2019
5
1
1
20
Phú Yên
Lương văn chánh
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Bé Bi rất thông minh và hiếu động. Bé vẫn thường chơi với những khối gỗ lập phương được sơn xanh hoặc đỏ. Một hôm bé lấy những khối gỗ thường ngày, xếp chồng lên nhau để tạo thành hình kim tự tháp. Bé xây theo nguyên tắc như sau: tầng dưới cùng có K * K khối lập phương. Tầng trên có (K – 1) * (K – 1) khối lập phương. Cho đến tầng trên cùng chỉ có 1 khối lập phương duy nhất. Bé Bi muốn xây một kim tự tháp cao N tầng với điều kiện các khối lập phương bên ngoài trên mỗi tầng chỉ toàn màu xanh. Tuy vậy do số lượng khối lập phương có hạn nên bé không thể xây kim tự tháp như mình mong ước. Hiện tại bé có B khối lập phương màu xanh và R khối lập phương màu đỏ. Hãy giúp bé tính xem, cần có thêm bao nhiêu khối lập phương màu xanh nữa thì sẽ xây được kim tự tháp như ý muốn.
- Dữ liệu vào: nhập từ bàn phím 3 số nguyên N, B, R
- Kết quả:
In ra màn hình một số duy nhất là số khối lập phương xanh cần thêm.
Ví dụ:

Dữ liệu vào

Kết quả

3 10 1

3
[TBODY] [/TBODY]

Ai có thể giúp mình lập trình bài này bằng c++ với ạ . MK cảm ơn
 

Tiến Phùng

Cựu Cố vấn Toán
Thành viên
27 Tháng mười 2018
3,742
3,705
561
Hà Nội
Trường Đại học Bách Khoa Hà Nội
Thế thì bài này mặc định là khối đỏ ko có ảnh hưởng gì lắm, khối xanh ngoài bọc bên ngoài cũng có thể xếp vào trong được
Vậy
Bước 1 tính tổng số khối lập phương T cần có để xếp được N tầng
Bước 2: Tính số lập phương xanh cần có để bọc đủ bên ngoài mỗi tầng, giả sử tầng K thì cần [TEX]K^2-(K-2)^2[/TEX]((k-2)^2 là số khối ở lõi ko cần lập phương xanh) = 4k-4.
Với riêng tầng 1 thì cần 1 LP xanh chứ ko phải dùng công thức kia.
Tính tổng LPX cần có của N tầng. Dễ thấy quy luật sau, lần lượt các tầng cần 1,4,8,12... từ 4 trở đi là 1 CSC có công thức tính tổng CSC rồi.
Vậy có thể tính nhanh số LPX
Bước 3: So sánh input. nếu B đủ thì số khối cần là T-B-R , nếu hiệu <0 thì trả về 0
Nếu B thiếu thì lấy LPX-B, sau đó xét hiệu x=T-LPX-R, nếu x>0 thì tổng cần là LPX-B+x
nếu x<=0 thì tổng cần là LPX-B;

int SoLuTion(int N, int B, int R)
{
int T = N * (N + 1) * (2 * N + 1) / 6;
int LPX = 1 + (N-1) * (2 * 4 + (N - 2) * 4) / 2;
int res;
if (B >= LPX)
{
res = T - B - R;
if (res < 0) res = 0;
}
else
{
int X = T - LPX - R;
if (X > 0) res = LPX - B + X;
else res = LPX - B;
}
return res;
}
 
  • Like
Reactions: Tiến huân
Top Bottom