最近我在一次采访中遇到了这个问题,但不幸的是我跳过了这个问题,但是我很想知道答案。你能帮我吗?
int sum = 0;
int num = 100000000;
for (int i = 0; i < num; i++){
for (int j = 0; j < num; j++ ){
sum += m_DataX[i] * m_DataX[j];
}
}
已编辑:另外,我想看看是否有可能对sum
使用以下表达式:
sum += m_DataX[i] * m_DataY[j];
答案 0 :(得分:13)
简单来说,就是数字总和的平方。 为什么?
让我们说一个数组是|1|2|3|
然后,代码产生
1*1 + 1*2 + 1*3
2*1 + 2*2 + 2*3
3*1 + 3*2 + 3*3
即
(1*1 + 1*2 + 1*3)
+ (2*1 + 2*2 + 2*3)
+ (3*1 + 3*2 + 3*3)
=> 1(1+2+3) + 2(1+2+3) + 3(1+2+3)
=> (1+2+3)
* (1+2+3)
因此,代码将为
int tempSum = 0;
for (int i = 0; i < num ; i ++){
tempSum+=m_DataX [i];
}
sum=tempSum*tempSum;
更新:
如果sum += m_DataX[i]*m_DataY[j]
让两个数组分别为|1|2|3|
和|4|5|6|
因此
1*4 + 1*5 + 1*5
2*4 + 2*5 + 2*6
3*4 + 3*5 + 3*6
=> 1*4 + 2*4 + 3*4
+ 1*5 + 2*5 + 3*5
+ 1*6 + 2*6 + 3*6
=> (1+2+3)
* (4+5+6)
答案 1 :(得分:0)
首先,在for循环外实例化i和j。然后将所有元素求和,然后计算将得出结果的平方。