Marshall
Marshall

Reputation: 154

Hi, i have a problem with this code. ODD and EVEN numbers

I have a problem with this piece of code, I'm trying to print the EVEN and ODD numbers, but there is a problem when it comes to show them, the vectors don't save the numbers as I'm expecting.

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int vect[n], even[n], odd[n]; // CREATING VECTORS LIMIT AFTER "n"
    
        for(int i = 1; i <= n; ++i) { // ENTERING The ELEMENS IN VECTOR
                cin >> vect[i];
        }
    
        for(int i = 1; i <= n; ++i) {
                if(vect[i] % 2 != 0) {
                    odd[i] = vect[i];           // I think that here's the problem, the vectors don't save the right numbers.
                }                               /// VERIFYING IF THE NUMBER IS ODD OR EVEN.
                else if (vect[i] % 2 == 0) {
                    even[i] == vect[i];
                }
        }
        for(int i = 1; i <= n; ++i) {
                cout << even[i] << " " << endl;    /// PRINTING THE ODD AND EVEN numbers.
                cout << odd[i] << " " << endl;
        }
    
    
    return 0;x
    }

Upvotes: 0

Views: 289

Answers (3)

Jarod42
Jarod42

Reputation: 217235

With standard, you might use std::partition (or stable version) to solve your problem:

void print_even_odd(std::vector<int> v)
{
    auto limit = std::stable_partition(v.begin(), v.end(), [](int n){ return n % 2 == 0; });
    
    std::cout << "Evens:";
    // Pre-C++20 span:
    // for (auto it = v.begin(); it != limit; ++it) { int n = *it;
    for (int n : std::span(v.begin(), limit)) {
        std::cout << " " << n;    
    }
    std::cout << std::endl;
    std::cout << "Odds:";
    for (int n : std::span(limit, v.end())) {
        std::cout << " " << n;    
    }
    std::cout << std::endl;
}

Demo

Upvotes: 1

Marshall
Marshall

Reputation: 154

I have fixed the problem, thanks all for help. Now it works perfectly.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int vect[n], even[n], odd[n], z = 0, x = 0; // CREATING VECTORS LIMIT AFTER "n"

    for(int i = 1; i <= n; ++i) { // ENTERING The ELEMENS IN VECTOR
            cin >> vect[i];
    }

    for(int i = 1; i <= n; ++i) {
            if(vect[i] % 2 != 0) {
                odd[1+z] = vect[i];
                z++;
                            // I think that here's the problem, the vectors don't save the right numbers.
            }                               /// VERIFYING IF THE NUMBER IS ODD OR EVEN.
            else if (vect[i] % 2 == 0) {
                even[1+x] = vect[i];
                x++;
            }
    }

    for(int i = 1; i <= x; i++) {
        cout << even[i] << " ";
    }
    cout << endl;
      for(int i = 1; i <= z; i++) {
        cout << odd[i] << " ";
    }


return 0;
}

Upvotes: 2

CKE
CKE

Reputation: 1608

Considering the hints of the comments, your program shall be changed into this:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int n, number;
        cin >> n;
        vector<int> vect, even, odd; // CREATING DYNAMIC VECTORS
    
        for(int i = 0; i < n; ++i) { // ENTERING THE ELEMENTS IN VECTOR
                cin >> number;
                vect.push_back(number);
        }
    
        for(int i = 0; i < n; ++i) {
                if(vect[i] % 2 != 0) { /// VERIFYING IF THE NUMBER IS ODD OR EVEN.
                    odd.push_back(vect[i]);
                }                      
                else {
                    even.push_back(vect[i]);
                }
        }
        for (int i = 0; i < n; ++i)
            cout << vect[i] << " ";
        cout << endl;
        /// PRINTING THE ODD AND EVEN NUMBERS.
        for (auto& val : odd)
            cout << val << " ";
        cout << endl;
        for (auto& val : even)
            cout << val << " ";
        cout << endl;
    return 0;
    }

It uses the vector container of STL for your arrays, start the indexing at 0 and prints out the resulting arrays separately, as the number of odd and of even entries might be different.

Hope it helps?

Upvotes: 1

Related Questions