Lý lịch
Tôi có một loạt các hộp hình vuông có kích thước bằng nhau, và vì tôi là một người gọn gàng, tôi muốn sắp xếp tất cả chúng thành một hình vuông. Tuy nhiên, số của chúng không nhất thiết là một hình vuông hoàn hảo, vì vậy tôi có thể phải xấp xỉ hình vuông. Tôi muốn bạn tìm cho tôi sự sắp xếp thẩm mỹ nhất - tất nhiên là lập trình.
Đầu vào
Đầu vào của bạn là một số nguyên dương duy nhất k
, đại diện cho số lượng hộp.
Đầu ra
Chương trình của bạn sẽ chọn hai số nguyên dương m, n
như vậy m*(n-1) < k ≤ m*n
. Chúng đại diện cho chiều rộng và chiều cao của hình dạng giống như hình vuông lớn mà chúng ta đang sắp xếp. Vì chúng ta đang tìm kiếm các hình dạng đẹp mắt, nên số lượng sẽ tối thiểu, sao cho hình gần với hình vuông và diện tích của nó gần với . Nếu vẫn còn một vài ứng cử viên cho cặp , hãy chọn một trong đó chiều rộng là tối đa.(m - n)2 + (m*n - k)2
k
(m, n)
m
Bây giờ, đầu ra thực tế của bạn sẽ không phải là số m
và n
. Thay vào đó, bạn sẽ in cách sắp xếp các hộp, sử dụng ký tự #
để thể hiện một hộp. Cụ thể hơn, bạn sẽ in n-1
các hàng, mỗi hàng bao gồm các m
ký tự #
và sau đó là một hàng k - m*(n-1)
ký tự #
. Lưu ý rằng đầu ra chứa chính xác các k
ký tự #
.
Quy tắc và chấm điểm
Sẽ không có bất kỳ khoảng trắng đầu hoặc cuối nào trong đầu ra, ngoại trừ hàng cuối cùng có thể được đệm với các khoảng trắng ở cuối có độ dài m
, nếu muốn. Có thể có một dòng mới, nhưng không có dòng mới nào trước đó. Bạn có thể sử dụng bất kỳ ký tự ASCII có thể in nào thay thế #
, nếu muốn.
Bạn có thể viết một chương trình đầy đủ hoặc trả về một chuỗi từ một hàm. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Các trường hợp thử nghiệm
Dưới đây là các đầu ra chính xác cho một vài giá trị đầu vào.
1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###