取出指令共同点,减少重复代码
利用STL中不定长数组vector
vector<int> a;//<double>也可以,这里a是构建了一个不定长一维数组,a[maxn]也可以,构建一个二维数组
a.size() //a的长度
a.push_back(b);//向a的尾部添加元素b,应该是不能加一串只加单个元素
a.resize(h);//将a的第h-1后的元素删掉,in other words, 保留前h个元素(notice:数组从0开始,第h个元素其数组中下标是h-1)
a.pop_back();//删除最后一个元素
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
using namespace std;
const int maxn=30;
int n;
vector<int> pile[maxn];
void found(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 l=h+1;l<pile[p].size();l++)
pile[pile[p][l]].push_back(pile[p][l]);
pile[p].resize(h+1);
}
void move_above(int pa,int h,int pb)
{
for(int l=h;l<pile[pa].size();l++)
pile[pb].push_back(pile[pa][l]);
pile[pa].resize(h);
}
void printf()
{
for(int k=0;k<n;k++){
printf("%d:",k);
for(int l=0;l<pile[k].size();l++)
printf(" %d",pile[k][l]);//printf("%s",pile[k])是不行的哦
cout<<endl;
}
}
int main()
{
cin>>n;
int a,b;
string s1,s2;
for(int i=0;i<n;i++)
pile[i].push_back(i);
while(cin>>s1){
if(s1=="quit")
break;
cin>>a>>s2>>b;
int pa,pb,ha,hb;
found(a,pa,ha);
found(b,pb,hb);
if(pa==pb) continue;
if(s1=="move") clear_above(pa,ha);
if(s2=="onto") clear_above(pb,hb);
move_above(pa,ha,pb);
}
printf();
return 0;
}