tło
Mam kilka kwadratowych pudeł równej wielkości, a ponieważ jestem zgrabną osobą, chcę ułożyć je wszystkie w kwadratową formację. Jednak ich liczba niekoniecznie jest kwadratem idealnym, więc może być konieczne przybliżenie kwadratu. Chcę, żebyś znalazł mi najbardziej estetyczny układ - oczywiście programowo.
Wejście
Twój wkład to pojedyncza dodatnia liczba całkowita k
reprezentująca liczbę pól.
Wynik
Twój program wybierze dwie liczby całkowite dodatnie m, n
, które będą się m*(n-1) < k ≤ m*n
utrzymywać. Reprezentują szerokość i wysokość dużego, kwadratowego kształtu, który układamy. Ponieważ szukamy estetycznych kształtów, ilość powinna być minimalna, aby kształt był zbliżony do kwadratu, a jego powierzchnia była bliska . Jeśli nadal jest kilku kandydatów do pary , wybierz ten, w którym szerokość jest maksymalna.(m - n)2 + (m*n - k)2
k
(m, n)
m
Teraz twoim faktycznym wyjściem nie będą liczby m
i n
. Zamiast tego wydrukujesz układ pudeł, używając znaku #
do przedstawienia pudełka. Mówiąc dokładniej, wydrukujesz n-1
wiersze, z których każdy składa się ze m
znaków #
, a następnie jeden wiersz k - m*(n-1)
znaków #
. Zauważ, że wynik zawiera dokładnie k
znaki #
.
Zasady i punktacja
Na wyjściu nie może być żadnych początkowych ani końcowych białych znaków, z wyjątkiem tego, że ostatni wiersz może być wypełniony końcowymi spacjami o długości m
, jeśli jest to pożądane. Może być jedna nowa linia, ale nie ma poprzedniej nowej linii. W #
razie potrzeby możesz użyć dowolnego drukowalnego znaku ASCII .
Możesz napisać pełny program lub zwrócić ciąg znaków z funkcji. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
Oto prawidłowe dane wyjściowe dla kilku wartości wejściowych.
1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###