时间:2013年9月16日
分析:由于A耗时最短,所以每次都安排A和另外一个人一起过桥,回来的时候A一个人回来。至于其他三个人的顺序,可以是任意的,这样总的时间是2+1+5+1+10=19.
详细解释见:赛马问题
剑指offer:面试题7 用两个栈实现队列
- #include <iostream>
- #include <stack>
- using namespace std;
- template <class T>
- class Queue
- {
- public:
- Queue()
- {
- }
- ~Queue()
- {
- }
- void add(const T& t);
- T remove();
- private:
- stack<T> s1;
- stack<T> s2;
- };
- template <class T>
- void Queue<T>::add(const T& t)
- {
- s1.push(t);
- }
- template <class T>
- T Queue<T>::remove()
- {
- if (s2.size() <= 0)
- {
- while (s1.size() > 0)
- {
- T t = s1.top();
- s2.push(t);
- s1.pop();
- }
- }
- if (s2.size() == 0)
- {
- throw new exception("empty queue");
- }
- T t = s2.top();
- s2.pop();
- return t;
- }
- int main()
- {
- Queue<char> q;
- q.add('A');
- q.add('B');
- q.add('C');
- cout<<q.remove()<<endl;
- cout<<q.remove()<<endl;
- cout<<q.remove()<<endl;
- system("pause");
- return 0;
- }