背景
我有一堆相等大小的正方形盒子,由于我是个整洁的人,所以我想将它们全部排列成正方形。但是,它们的数量不一定是完美的正方形,因此我可能不得不近似正方形。我希望您找到我最美的安排-当然是通过编程。
输入值
您的输入是一个正整数k
,代表盒子的数量。
输出量
您的程序应选择两个正整数m, n
使之m*(n-1) < k ≤ m*n
成立。它们代表了我们正在排列的大正方形形状的宽度和高度。由于我们正在寻找具有美学美感的形状,因此数量应尽可能少,以使形状接近正方形,并且面积接近。如果该对还有几个候选者,请选择宽度最大的那个。(m - n)2 + (m*n - k)2
k
(m, n)
m
现在,您的实际输出将不是数字m
和n
。取而代之的是,您应使用字符#
来表示框来打印框的排列。更具体地说,您应打印n-1
行,每行包含m
字符#
,然后打印一行k - m*(n-1)
字符#
。请注意,输出中完全包含k
字符#
。
规则和计分
输出中不得包含任何前导或尾随空格,除非需要,最后一行可以用尾随空格填充,该尾随空格的长度应为length m
。可能只有一个尾随的换行符,但没有前面的换行符。#
如果需要,可以使用任何可打印的ASCII字符代替。
您可以编写完整的程序,或从函数返回字符串。最低字节数获胜,并且不允许出现标准漏洞。
测试用例
这是一些输入值的正确输出。
1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###