【发布时间】:2019-11-13 23:06:54
【问题描述】:
对于下面的一段代码,我使用了一个包含项目 {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);
result += preresult;
}
}
问题是,当我在内循环j从1开始时,我的答案是30,只有当我改为j = i + 1时才得到正确答案。
谁能给我解释一下为什么? j = 1 不会工作得很好吗?
【问题讨论】:
-
如果您从 1 开始,您将包含每对两次,并且每个数字的“对”与其本身。
-
int ans = 0; for(int i=0;i<3;i++){ans += v[i]*v[(i+1)%3];} -
使用调试器,单步调试程序,你会看到它在做什么。
-
@AviBerger 请考虑将您的评论(指出所有可能对和不同对之间的区别)扩展为答案。跨度>