向量中数字的顺序

时间:2019-11-04 11:54:05

标签: c++ vector

void Numbers()
{

    do
    {
        cout << "Enter the value for the sequence: ";
        cin >> K;

            if ( K <= 3)
            {
                cout << "Write a bigger number!" << endl;
            }
    } while(K <= 3);

    cout << "Enter the first number: ";
    cin >> N;
}

double Sum()
{
    vector<double> arr(K);
    arr.push_back(N);

    for (int i=0; i < arr.size(); i++)
        arr.at(i)=i;

    cout << "Vector contains: ";
    for (int i=0; i < arr.size(); i++)
    cout << arr.at(i);


int main()
{
    Numbers();
    Sum();

    return 0;
}

编写一个程序,该程序生成由K(K> 3)个数字组成的序列,如下所示:

上述序列的成员如下获得:

第一个元素是N; 第二个是N +1; 第三-N * 2。 换句话说,我们始终向每个元素加1,然后将其放在序列的末尾,然后再乘以2,然后再将乘积放在序列的末尾。选择并实现一个合适的数据结构,该数据结构可用于生成上述数字序列。

用户应输入K和第一个元素N的值。

这是我当前的代码(在上面的代码中)。老实说,我真的不知道从这里往哪里走。关于如何根据上述条件创建序列的任何建议?

2 个答案:

答案 0 :(得分:0)

这里是一种可能性,使用生成器来生成序列中的下一个元素。

class Seq
{
public:
    Seq(int n) : n(n) {}
    int operator*() const { return n; }
    Seq operator++(int)
    {
        Seq old(n);
        n = fns[fn](n);
        fn = 1 - fn;
        return old;
    }
private:
    int n;
    int fn = 0;
    std::function<int(int)> fns[2] = {[](int x) { return x + 1; },
                                      [](int x) { return x * 2; }};
};

int main()
{
    int N = 1;
    int K = 20;
    Seq seq(N);
    for (int i = 0; i < K; i++)
    {
        std::cout << *seq++ << ' ';
    }
    std::cout << std::endl;
}

答案 1 :(得分:0)

您可以使用以下代码获取所需内容:

#include <iostream>
#include <vector>

using namespace std;

vector<double> createOutputArray (int K, int N)
{
    vector<double> arr;
    int tmp = N;

    arr.push_back(tmp);
    for(int i=1; i+2<=K; i+=2)
    {
        arr.push_back(++tmp);
        arr.push_back(tmp * 2);
        tmp *= 2;
    }
    if(K % 2 == 0)
        arr.push_back(++tmp);

    return arr;
}

int main()
{
    int K;
    double N;
    do
    {
        cout << "Enter the value for the sequence: ";
        cin >> K;

        if ( K <= 3)
        {
            cout << "Write a bigger number!" << endl;
        }
    } while(K <= 3);

    cout << "Enter the first number: ";
    cin >> N;

    vector<double> output = createOutputArray(K, N);
    for (int i=0; i < output.size(); i++)
    {
        cout << output.at(i);
        if(i < output.size()-1)
            cout << ",";
        else
            cout << endl;
    }

    return 0;
}