C++ 从j=i+;嵌套for循环中的1 vs j=1
对于下面的代码,我使用了一个包含项{1,2,3}的向量,我只想得到对的乘积之和,例如(1*2)+(1*3)+(2*3),它是11C++ 从j=i+;嵌套for循环中的1 vs j=1,c++,for-loop,variables,C++,For Loop,Variables,对于下面的代码,我使用了一个包含项{1,2,3}的向量,我只想得到对的乘积之和,例如(1*2)+(1*3)+(2*3),它是11 for(unsigned i = {0}; i < vec.size(); ++i) { for(unsigned j = i + 1; j < vec.size(); ++j) { // ^^^^^^^ preresult = vec.at(i) * vec.at(j);
for(unsigned i = {0}; i < vec.size(); ++i) {
for(unsigned j = i + 1; j < vec.size(); ++j) {
// ^^^^^^^
preresult = vec.at(i) * vec.at(j);
result += preresult;
}
}
for(无符号i={0};i
问题是,当我从1开始在内部循环中使用j
时,我的答案是30,只有当我更改为j=I+1
时,我才得到正确的答案
有人能给我解释一下原因吗?
j=1
是否正常工作?只有3个值,因此我们可以在短时间内展开循环
从j=1开始
result += vec.at(0) * vec.at(1); // 2
result += vec.at(0) * vec.at(2); // 3
result += vec.at(1) * vec.at(1); // 4 Oops: pairing 2 with itself
result += vec.at(1) * vec.at(2); // 6
result += vec.at(2) * vec.at(1); // 6 Oops: Seen already
result += vec.at(2) * vec.at(2); // 9 Oops: pairing 3 with itself
从j=i+1开始
result += vec.at(0) * vec.at(1); // 2
result += vec.at(0) * vec.at(2); // 3
result += vec.at(1) * vec.at(2); // 6
如果从1开始,则每个数对包含两次,并且每个数的“对”本身包含两次。int ans=0;对于(int i=0;i使用调试器,通过程序),您将看到它正在做什么。请AuvibGER,考虑扩展您的注释(指出所有可能的对和不同的对之间的差异)为答案。