Создать Стек С Числами В Диапазоне От -50 До +50

Тема в разделе "Общие вопросы по С и С++", создана пользователем shilovec5377, 15 май 2013.

  1. shilovec5377

    shilovec5377 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    12
    Симпатии:
    0
    Всем привет. помогите с условием:
    Преобразовать стек в 2 стека. В первый поместить все четные, а во второй нечетные числа.

    Код (C++):
    #include <iostream>
    #include <stack>
    #include <cstdlib>
    #include <ctime>

    using namespace std;

    template <typename T>
    void print_stack(std::stack<T> &s)
    {
    if (!s.empty()) {
    T top = s.top();
    s.pop();
    cout << top << endl;
    print_stack(s);
    s.push(top);
    }
    }

    int main()
    {
    srand(time(0));

    stack<int> st;

    double max = 50.0, min = -50.0;

    for (size_t i = 0; i != 100; i++)
    st.push( (max - min) * ( (double)rand() / (double)RAND_MAX ) + min );

    print_stack(st);
    return 0;
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #include <iostream>
    #include <stack>
    #include <cstdlib>
    #include <ctime>
    using namespace std;

    template<class T>
    void print(stack<T> st) {
    while (false == st.empty()) {
    cout << st.top() << " ";
    st.pop();
    }
    cout << endl;
    }

    int main() {
    srand(time(0));

    stack<int> st, st1, st2;
    const int max = 50, min = -50;

    for (size_t i = 0; i < 10; i++)
    st.push(rand() % (max - min) - min);

    while (false == st.empty()) {
    auto t = st.top();
    st.pop();
    (t & 1 ? st1 : st2).push(t);
    }

    print(st1);
    print(st2);

    return 0;
    }
     
  3. shilovec5377

    shilovec5377 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    12
    Симпатии:
    0
    а как можно вывести первозданный стек?


    Добавлено: а как можно вывести первозданный стек?
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #include <iostream>
    #include <stack>
    #include <cstdlib>
    #include <ctime>
    using namespace std;

    template<class T>
    void print(stack<T> &st) {
    while (false == st.empty()) {
    cout << st.top() << " ";
    st.pop();
    }
    cout << endl;
    }

    template<class T>
    void divide(stack<T> &st, stack<T> &st1, stack<T> &st2) {
    if (st.empty())
    return;
    auto t = st.top();
    st.pop();
    (t & 1 ? st1 : st2).push(t);
    divide(st, st1, st2);
    st.push(t);
    }

    int main() {
    srand(time(0));

    stack<int> st, st1, st2;
    const int max = 50, min = -50;

    for (size_t i = 0; i < 10; i++)
    st.push(rand() % (max - min) - min);

    divide(st, st1, st2);

    print(st);
    print(st1);
    print(st2);

    return 0;
    }
    рекурсию использовать для этого можно, например, но это ненормально, нехорошо.
     
Загрузка...

Поделиться этой страницей