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;
}

Écrivez un programme qui génère la séquence de K (K> 3) nombres comme suit:

Les membres de la séquence ci-dessus sont obtenus comme suit:

Le premier élément est N; le second est N + 1; le troisième - N * 2. En d'autres termes, nous ajoutons systématiquement 1 à chaque élément et le mettons à la fin de la séquence, puis le multiplions par 2 et encore, mettons le produit à la fin de la séquence. Choisissez et implémentez une structure de données appropriée qui peut être utilisée pour générer la séquence de nombres ci-dessus.

Les utilisateurs doivent saisir les valeurs de K et du premier élément N.

Ceci est mon code actuel (dans le code ci-dessus). Je ne sais pas vraiment où aller à partir d'ici pour être complètement honnête. Des suggestions sur la façon de créer la séquence à partir de la condition ci-dessus?

0
Vap0ur3x 4 nov. 2019 à 14:54

2 réponses

Vous pouvez utiliser ce code pour obtenir ce que vous voulez:

#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
Iman Kianrostami 5 nov. 2019 à 07:28

Voici une possibilité, en utilisant un générateur pour produire l'élément suivant dans la séquence.

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;
}
0
molbdnilo 4 nov. 2019 à 12:57