【问题标题】:Beginner C++ Nested Loop exercise problem初学者C++嵌套循环练习题
【发布时间】:2021-02-19 21:09:06
【问题描述】:

我试图找出我的嵌套循环出了什么问题,但没有收到我正在进行的练习的答案。最初的错误是有符号比较。

提示:给定一个名为 vec 的整数向量,求所有向量元素对的乘积之和。例如:{1,2,3}: (1x2)+(1x3)+(2x3) = 11。这需要存储在一个名为 result 的变量中。

函数已经设置好了,我只是写正文而已。

我的想法是,我试图用第一个 for 循环获取向量中的第一个元素,然后使用第二个 for 循环将第一个元素与向量中的其余元素相乘。我认为 j = i+1 可以让我避免在第一个 for 循环中使用的值并访问其余元素。

int result = 0;
int pair = 0;
for(int i = 0; i<=vec.size(); ++i){
    int num1 = vec.at(i);
        for(int j = i+1; j <= vec.size(); ++j){
            int num2 = vec.at(j);
            pair = num1 * num2;
            result = result + pair;
        }       
}

【问题讨论】:

  • 你没有解释你的问题是什么
  • num1*num2 的结果称为product。尽量避免使用像 pair 这样的标准名称,因为它位于 std::pair
  • 您好,如果您对答案很清楚,请同时标记,以便其他人知道。

标签: c++ loops for-loop vector nested-loops


【解决方案1】:

有两个错误

  1. 向量的大小是一个无符号量,特别是类型是size_t,所以这是你应该为i变量使用的类型。这将修复有符号/无符号比较警告。

  2. 向量从开始索引。因此,向量的有效索引从零变为比向量的大小小一。所以i&lt;=vec.size() 不正确。

将这两个修复程序放在一起,您的循环应该如下所示

for (size_t i = 0; i < vec.size(); ++i) {

j 循环的类似问题。

【讨论】:

    【解决方案2】:
    int result = 0;
    int pair = 0;
    for(size_t i = 1; i <= vec.size(); ++i){               // if you want it 1 indexed
        int num1 = vec.at(i-1);
            for(size_t j = i+1; j <= vec.size(); ++j){
                int num2 = vec.at(j-1);
                pair = num1 * num2;
                result = result + pair;
            }       
    }
    
    int result = 0;
    int pair = 0;
    for(size_t i = 0; i < vec.size(); ++i){               // if you want it 0 indexed
        int num1 = vec.at(i);
            for(size_t j = i+1; j < vec.size(); ++j){
                int num2 = vec.at(j);
                pair = num1 * num2;
                result = result + pair;
            }       
    }
    

    @john 给出的解释足以回答您的问题。此外,您应该注意@phuclv 建议的变量名称。 希望你现在一切都好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多