The problem: You are given three towers a, b, and c. We start with n rings on to
ID: 3626014 • Letter: T
Question
The problem:
You are given three towers a, b, and c. We start with n rings on tower a and we need to transfer them to tower b subject to the following restrictions:
1. We can only move one ring at a time, and 2. We may never put a larger numbered ring on top of a smaller numbered one.
There are always 3 towers. Your program will prompt the user for the number of rings.
#include <iostream>
#include<vector>
// NOTE: This program uses the vector container from the stl.
using namespace std;
void main(){ vector<int> t[3];
// three towers A,B,C represented as an array of 3 vectors int n, candidate,to, from, move=0; // move counts the move number
cout<<"Please enter an ODD number of rings to move: ";
cin>>n; cout<<endl;
//intitialize the 3 towers for(int i=n+1;i>=1;i--)
t[0].push_back(i);
t[1].push_back(n+1);
t[2].push_back(n+1);
// initialize towers and candidate from=0; to=1; candidate=1;
while( t[1].size()<n+1){ // there are still rings to transfer to tower B = t[1] //write it
}
}
cout<<"move number "<<++move<<": Transfer ring <<candidate<< " from tower "<< char(from+65)<<" to tower "<<char(to+65)<<endl;
//do it: move the disks around
1. Push the top of the “from” tower to the “to” tower
2. Remove the ring from the “from” tower
//get next “from tower” It’s not the most recent “to” – so which is it?
if( ) else from=;
from=; // get next “to tower”
if( to= ;) else to= ; //get next candidate
candidate= ; // it’s on the top of the current “from tower”
Explanation / Answer
#include // a disk with a value , which is an element of the stack ,tower in this case class Disk { public: int value; Disk* next; };//class Disk class Tower //a stack data structure representing a tower { public: int size; Disk* current; Tower() { size=0; current=NULL; }//default constructor int peep(); bool push(int); bool pop(); bool isEmpty(); int getTowerSize(); void printTowerSize(); void printTowerDisks(); void printTowerMenu(); }; int Tower::peep() { return this->current->value; } bool Tower::push(int ele) { Disk* temp; temp=new Disk; if(current==NULL) { temp->next=NULL; } else { temp->next=current; } temp->value=ele; this->current=temp; size++; return false; } bool Tower::pop() { if(isEmpty()) { coutRelated Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.