作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用蛮力来回答这个问题,这样我就可以理解发生了什么:
https://www.interviewcake.com/question/java/product-of-other-numbers
但问题是我不明白为什么我的逻辑不起作用。到目前为止,这是我尝试过的:
public class EveryInteger {
public static void main(String[] args) {
int a1[] = {1, 7, 3, 4};
int a2[] = new int[4];
for(int i =0; i<a1.length; i++){
int index = a1[i];
int sum = 0;
for(int j =0; j<a1.length; j++){
if(a1[i]==a1[j]){
continue;
}
sum = index * a1[j];
a2[i] = sum;
System.out.println(a2[i]);
}
}
}
谁能告诉我你是如何使用两个 for 循环解决这个问题的?
最佳答案
这里有几个问题:
// defining an array like this is confusing because the type is not immediately clear, rather use int[] a1 = ...
int a1[] = {1, 7, 3, 4};
// a2 should always have the same length as a1, so use a1.length
int a2[] = new int[4];
for(int i =0; i<a1.length; i++){
// index is a little confusing, since it's not the index but the value at i
int index = a1[i];
// sum is also confusing, since you're working with multiplication here
// Additionally with multiplication involved, initialize that to 1
int sum = 0;
for(int j =0; j<a1.length; j++){
// comparing only j and i would be sufficient here without accessing the array twice
if(a1[i]==a1[j]){
continue;
}
// Instead of accumulating the product you reassign it every time, effectively deleting the previous value.
sum = index * a1[j];
a2[i] = sum;
System.out.println(a2[i]);
}
}
解决方案可能如下所示:
int[] input = {1,7,3,4};
int[] output = new int[input.length];
for(int i = 0; i < input.length; i++) {
// Accumulates the multiplications.
int acc = 1;
for(int j = 0; j < input.length; j++) {
// check, if not at the same index.
if(j != i) {
// only then multiply the current number with the accumulator.
acc *= input[j];
}
}
// finally write the accumulated product to the output array.
output[i] = acc;
}
System.out.println(Arrays.toString(output));
结果如愿:
[84, 12, 28, 21]
关于java - 使用蛮力的其他数字乘积 InterviewCake 答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40630478/
我是一名优秀的程序员,十分优秀!