- 題目分析:
本題考點泳炉,vector容器
難點:
總結(jié)不同的操作方法的共同點
英語閱讀,理解題意 moves the pile of blocks consisting of block a, and any blocks that are stacked above block a是說a及a以上的積木
- 編程中遇到的問題
如何遇到quit即停止
一開始考慮while(cin>>s1>>a>>s2>>b&&s1!="quit")
,發(fā)現(xiàn)如果這樣抱完,在輸入一個quit后是不能停止的辛辨,因為要在輸入a,s2,b后才會判斷s1
在參考了其他人的方案后十饥,最終代碼如下
#include<iostream>
#include<vector>
using namespace std;
vector<int> pile[30];
int n;//n組
void find_block(int a,int & p,int & h)
{
for( p=0;p<n;p++)
for( h=0;h<pile[p].size();h++)
{
if(pile[p][h]==a)
return;
}
}
void clear_above(int p,int h)
{
for(int i=h+1;i<pile[p].size();i++)
{
int b=pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h+1);
}
void move(int p,int h,int p2)
{
for(int i=h;i<pile[p].size();i++)
{
pile[p2].push_back(pile[p][i]);
}
pile[p].resize(h);
}
void print()
{
for(int i=0;i<n;i++)
{
cout<<i<<":";
for(int j=0;j<pile[i].size();j++)
{
cout<<" "<<pile[i][j];
}
cout<<endl;
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
pile[i].push_back(i);//給每堆賦初值
int a,b,pa,ha,pb,hb;
string s1,s2;
while(cin>>s1)
{ if(s1=="quit")
break;
cin>>a>>s2>>b;
find_block(a,pa,ha);
find_block(b,pb,hb);
if(pa==pb)continue;
if(s1=="move")
clear_above( pa,ha);
if(s2=="onto")
clear_above( pb,hb);
move(pa,ha,pb);
}
print();
return 0;
}