Задача упражнения с вложенным циклом для начинающих C

#c #loops #for-loop #vector #nested-loops

#c #циклы #for-loop #вектор #вложенные циклы

Вопрос:

Я пытаюсь выяснить, что не так с моим вложенным циклом, не получая ответа на упражнение, над которым я работаю. Первоначальная ошибка заключается в том, что происходит сравнение подписности.

Подсказка: учитывая вектор целых чисел с именем vec, найдите сумму произведения всех пар векторных элементов. Пример: {1,2,3}: (1×2) (1×3) (2×3) = 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;
        }       
}
  

Комментарии:

1. Вы не объясняете, в чем ваша проблема

2. вызывается результат num1*num2 product . Старайтесь избегать стандартных имен, например pair , потому что это в std::pair

3. Привет, если вам понятен ответ, пожалуйста, отметьте его также, чтобы другие люди могли узнать об этом.

Ответ №1:

Есть две ошибки

  1. Размер вектора — это величина без знака, в частности, тип size_t , так что это тип, который вы должны использовать для своей i переменной. Это исправит предупреждение о сравнении со знаком / без знака.

  2. Векторы индексируются с нуля. Таким образом, допустимые индексы для вектора изменяются от нуля до единицы меньше размера вектора. So i<=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.
Надеюсь, теперь у вас все в порядке.