我的解决方案是这样的:
获取所有可能的对(不是与问题要求的元素相同的对),然后检查第一个元素是否为完美正方形(如果为真) 检查其他元素是否为完美正方形。
检查完美平方只是求平方根并检查小数部分。
我在面试中被问到这个问题,但它需要做得更好。 谁能给我一个更好的方法。
int cnt = 0.0;
for (int i = 0; i < test; i++) {
for (int j = 0; j < test; j++) {
if (!(i == j)) {
double prod = Math.sqrt(arr[i]);
int prodi = (int) prod;
double frac = prod - prodi;
if (frac == 0.0) {
//System.out.println("SAdfs");
prod=Math.sqrt(arr[j]);
prodi = (int)prod;
frac = prod-prodi;
if (frac == 0.0) {
cnt++;
}
}
}
}
}
double denom=test*(test-1);
double result=cnt/denom;
String strDouble = String.format("%.6f", result);
System.out.println(result);
最佳答案
您需要找到两个输入的阶乘及其计数,例如
12 = 2 ^ 2, 3 ^ 1;
27 = 3 ^ 3;
然后您需要对两个输入的阶乘因子求和(例如我给出的是 2:2、3:4)。如果所有阶乘都有一个可以被 2 整除的因子(即因子 % 2 == 0)那么它就是一个完美的正方形
关于java - 计算产品为完美正方形的数组中对数的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655795/