我必须在用户给出输入编号的情况下将2d数组(大小由用户给出)划分为子数组。我写的代码适用于大多数实例,有一些我需要一些帮助。
我通过取输入数字的平方根来做到这一点。例如: 如果用户插入[10,10,9],则意味着这是一个包含9个子阵列的10 * 10阵列。取9的平方根工作正常,因为它给出了3。 如果用户插入[8,6,6],则取6的平方根并将其向上舍入为最长边(给出3)并将其向下舍入为最短边(即2)。所以3 * 2 = 6.它也可以正常工作。
然后有一个像8的情况.8的平方根给出3和2.所以数组被分成6个子数组。有没有其他方法可以找到更好的分区,如8,14?或者有没有办法找到这些数字的最佳分布(例如2 * 4 = 8,2 * 7 = 14)?
答案 0 :(得分:1)
你可以用不同的方式计算它们:
int x = Math.round(Math.sqrt(n));
int y = Math.round(1. * n / x);
因此你会收到:
n = 8 => x = 3, y = 3
n = 14 => x = 4, y = 4
答案 1 :(得分:0)
您需要做的是找到平方根的两个最近因子。试试这段代码:
long n = 14;
long y = 0;
long x = Math.round(Math.sqrt(n));
while(true){
if (n % x == 0) {
y = n/x;
break;
}
else {
x--;
}
}
您可能还想进行一些错误检查以应对输入错误。例如N'。1