如何打印第一个和最后一个元素的总和,然后打印第二个和倒数第二个的总和,依此类推?

时间:2018-07-16 10:03:37

标签: c++ c++11

我对编程非常陌生,并且正在研究C ++ Primer 5th版本。其中一个练习要求我在向量中输入一组整数,并打印第一个和最后一个元素的总和,然后打印第二个和倒数第二个等。

我尝试了多种方法,这些方法是我在GitHub上找到的,以及其他与遍历向量相关的问题的答案...但是没有一种有效。 这是我最近的尝试:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> Vect;
    int Num;

    while (std::cin >> Num) {
        Vect.push_back(Num);

        for (decltype(Vect.size()) A = 0, B = Vect.size() -1 ; A != B; ++A, --B) {
            std::cout << Vect[A] + Vect[B] << std::endl;
        }
    }

    return 0;
}

任何提示或想法将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:5)

您处在正确的轨道上,只需确保在对输入进行任何处理之前先阅读输入。 基本上,将元素求和的部分应该在while循环之外以读取输入。

答案 1 :(得分:2)

您的意思是这样的吗?

std::vector<int> a(100), res;
std::iota(a.begin(), a.end(), 1);
std::transform(
  a.begin(), a.begin()+a.size()/2, a.rbegin(), 
  std::back_inserter(res), std::plus<int>());

答案 2 :(得分:1)

您应该了解为什么代码崩溃?

您要求编译器同时输入元素并执行一些逻辑,在这种情况下,您输入数字,然后检查向量大小,然后执行逻辑,即打印第一个和最后一个然后是A ++和B-的总和-获得第二个倒数第二个。

让我们调试一下以了解更多信息

假设您已编译并且输入的第一个输入为5,这意味着您现在拥有一个元素{5} 插入数字后,编译器将转到下一行以继续逻辑,然后将找到条件A != B,并且您拥有一个元素{5},这意味着A = B,因此编译器将不会进入循环运行逻辑

然后第二个输入为5,这意味着您现在有两个元素{5,5} 插入数字后,编译器将转到下一行以继续逻辑,然后将找到条件A != B,并且您有一个元素{5,5},这意味着A!= B,因此编译器将进入循环以运行逻辑。

编译器将求和向量5 + 5中的第一个和最后一个(向量中仅2个元素,A = vect [0],B = vect [1]),并打印结果10,然后将A ++和B-,A将是A = vec [1],B将是B = vect [0],结果也将是10,然后A ++和B-- >> 编译器将找不到带有vect [-1]或vect [2]的任何元素,因此,应用程序将崩溃。

学习课程

如果您在输入过程中无需执行任何逻辑,则将您的输入与代码逻辑分开。

您应该将for循环置于while循环之外。

更新:您的代码应类似于

#include<iostream>
#include<vector>


using namespace std;

int main ()
{

    vector<int> Vect;
    int Num;

    while (cin >> Num) {
        Vect.push_back(Num);

    }

     for (decltype(Vect.size()) A = 0, B = Vect.size() -1 ; A < B; ++A, --B) {
            cout << Vect[A] + Vect[B] << std::endl;
        }
    return 0;
}

您会看到我也将条件A != B更改为A < B,因为您的条件将使A永远增加,而B将永远减少并导致您的应用程序崩溃

另外,不要忘记限制输入,不要进入无限循环输入 限制输入“我输入4个数字作为示例”后,请参见以下代码

#include<iostream>
#include<vector>


using namespace std;

int main ()
{

    vector<int> Vect;
    int Num,c=0;

    while (c<4) {
        cin >> Num;
        Vect.push_back(Num);
       c++;
    }

     for (decltype(Vect.size()) A = 0, B = Vect.size() -1 ; A < B; ++A, --B) {
            cout << Vect[A] + Vect[B] << std::endl;
        }
    return 0;
}

答案 3 :(得分:0)

采用a[N]数组的c ++数组方法:

int i, j;
for (i = 0, j = N - 1; i <= j; ++i, --j){
   cout<<a[i] + a[j]<<endl;
}