2015-10-08 1 views
-11

Я разрабатываю программу на C++, которая использует STL.C++: Как получить максимальное нечетное число в стеке

+5

[Что вы пробовали?] (Http://mattgemmell.com/what-have -you-try /) – Drop

+0

Вы не можете сделать это за один шаг или цикл, вы должны сделать это, используя временный стек. –

+0

Вам нужно сохранить номера в stk нетронутыми? – SingerOfTheFall

ответ

2

Как просто, как он получает:

int foo(stack<int> stk) 
{ 
    int result = 0; 

    while(!stk.empty()) 
    { 
     int val = stk.top(); 
     if(val % 2 != 0) 
      if(val > result) 
       result = val; 
     stk.pop(); 
    } 

    return result; 
} 

Это скопирует стек, чтобы сохранить оригинальный стек нетронутыми. Если вам не нужно содержимое стека, передайте его по ссылке (int foo(stack<int> & stk). Если стек может содержать отрицательные числа, введите result с чем-то вроде INT32_MIN.

+0

Большое вам спасибо .. он работал очень хорошо – user3479130

0

Я не знаю, зачем вам это странное число.

Я предполагаю, что вам необходимо поддерживать заказ LIFO, но в какой-то момент потребуется знать максимальное нечетное число. Итак, я бы предложил создать класс оболочки для стека, который следит за этим максимальным нажатием. Таким образом, вы получите максимум в O (1).

Let be WStack<int> этот класс.

Его конструктор будет иметь элемент данных, называемый max_odd который может быть инициализирован следующим образом:

max_odd = numeric_limits<int>::min(); 
if (max_odd % 2 == 0) 
    ++max_odd 

Теперь вы можете написать метод push() таким образом:

void WStack<int>::push(int item) 
{ 
    s.push(item); // s is a data member of type stack<int> 
    if (item % 2 != 0 
    max_odd = max(max_odd, item); 
} 

Наконец, последний метод наблюдатель для максимального нечетного числа:

int WStack<int>::get_max_odd() const { return max_odd; } 

Однако эта оболочка правильна только в том случае, если и только она уверена, что нечетные числа будут нажаты. Вы можете решить эту проблему, поставив некоторый логический флаг и, в конце концов, выбросив исключение, если какое-либо нечетное число не было вставлено и ваш звонок get_max_odd()

Смежные вопросы