在子数组中分区2d数组

时间:2014-11-27 12:23:12

标签: java arrays

我必须在用户给出输入编号的情况下将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)?

2 个答案:

答案 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