由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 汉若塔问题
相关主题
问一道crack tech interview里面的题one C++ question
面试F家让先做programming puzzleC++ object size一问
还是career cupOne C++ question
请问申F家都要先做puzzle吗one C++ question
amazon的那道题目发个题目给大家复习一下marco
Interview questions, BloombergWhy I can't compile this function successfully
一个容易记忆的permutation算法C++: what is the output? How to interpret it?
好记(但不是最优)的combination算法C++ Q42: (C22)
相关话题的讨论汇总
话题: tower话题: int话题: void话题: movedisks
进入JobHunting版参与讨论
1 (共1页)
z**********8
发帖数: 229
1
#include
using namespace std;
#include
#include
class Tower{
private:
int index;//indicate the number of tower
stack one_tower;
public:
Tower(int i=0):index(i){}//constructor
int getindex();
void add(int d);
void moveTopTo(Tower t);
void print();
void moveDisks(int n,Tower Destination,Tower buffer);
};
int Tower::getindex()
{
return index;
}
void Tower::add(int d)
{
if((!one_tower.empty())&&(d>one_tower.top()))
cout<<"error placing disks "< else
one_tower.push(d);
}
void Tower::moveTopTo(Tower t)
{
cout<<"move "< t.add(one_tower.top());
one_tower.pop();
//cout<<"move disk from tower "< }
void Tower::print()
{
cout<<"Contens of Tower "< while(one_tower.top())
{
cout< one_tower.pop();
};
cout< }
void Tower::moveDisks(int n,Tower Destination,Tower buffer)
{
cout<<"entering moveDisks, now n is: "< Destination.getindex()<<" buffer is "< if(n>0)
{
moveDisks(n-1,buffer,Destination);
cout<<"debug"< moveTopTo(Destination);
buffer.moveDisks(n-1,Destination,*this);
}
}
//End definition of class Tower
void Towers_of_Hanoi()//this function used to move n disks from tower0 to
tower2
{
int n=3;
vector towers;
for(int i=0;i<3;i++)
{
Tower *pp = new Tower(i);
towers.push_back(*pp);
delete pp;
}
for(int j=n;j>0;j--)
towers[0].add(j);
towers[0].moveDisks(n,towers[2],towers[1]);
}
void main()
{
Towers_of_Hanoi();
}
几乎按着书上给的答案写的,唯一的区别是我把要移动的总数换成了3(方便debug),
自己设置了一些debug的句子,发现是在buffer调用moveDisks后,n=1的时候应该把
value1从tower2 move到tower1的时候,此时moveTopTo(Destination)没法执行,给出
的信息是“expresssion:deque iterator not dereferencable " 求解释。。。
b***i
发帖数: 3043
2
传Tower的参数应该是都引用,否则传入的是一个copy在栈上。你pop总是one_tower自
己的成员pop,而给别的tower add,总是给一个copy来增加。最后tower都空了。

【在 z**********8 的大作中提到】
: #include
: using namespace std;
: #include
: #include
: class Tower{
: private:
: int index;//indicate the number of tower
: stack one_tower;
: public:
: Tower(int i=0):index(i){}//constructor

z**********8
发帖数: 229
3
就是这个问题,谢谢了!

【在 b***i 的大作中提到】
: 传Tower的参数应该是都引用,否则传入的是一个copy在栈上。你pop总是one_tower自
: 己的成员pop,而给别的tower add,总是给一个copy来增加。最后tower都空了。

1 (共1页)
进入JobHunting版参与讨论
相关主题
C++ Q42: (C22)amazon的那道题目
问个c++题Interview questions, Bloomberg
C++问题一个容易记忆的permutation算法
弱问个C++ 问题 (const_cast)好记(但不是最优)的combination算法
问一道crack tech interview里面的题one C++ question
面试F家让先做programming puzzleC++ object size一问
还是career cupOne C++ question
请问申F家都要先做puzzle吗one C++ question
相关话题的讨论汇总
话题: tower话题: int话题: void话题: movedisks