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”