Последовательность для чисел в векторе - PullRequest
0 голосов
/ 04 ноября 2019
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 + 1;третий - N * 2. Другими словами, мы последовательно добавляем 1 к каждому элементу и помещаем его в конец последовательности, затем умножаем его на 2 и снова помещаем произведение в конец последовательности. Выберите и реализуйте подходящую структуру данных, которую можно использовать для генерации вышеуказанной последовательности чисел.

Пользователи должны вводить значения для K и первого элемента N.

Это мой текущий код (вкод выше). Я не знаю, куда идти дальше, чтобы быть полностью честным. Любые предложения о том, как создать последовательность из условия выше?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Вы можете использовать этот код, чтобы получить то, что вы хотите:

#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;
}
0 голосов
/ 04 ноября 2019

Вот одна возможность, используя генератор для создания следующего элемента в последовательности.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...