vector c++中封装好的类 头文件<vector> 是线性表的顺序表示 简单而又实用 推荐掌握哦!
Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。
101这道题输入中有4个命令,一般我们会一个函数实现一个命令,但是我们仔细观察思考后会发现这4个命令有很大的相似性,所以我们把他们相似的部分抽象出来作为函数,首先是这两个函数:复原(归位) 移动。 然后还需要找到某个数字在哪个Blocks中哪个地方,把这个做成一个函数。
函数这个东西就像是我们为了完成一个任务而造工具,这些工具应该各不相同并且都非常有用才对。
我们在设计程序时应该花一些时间想想需要写哪些函数,而不是一股脑的想到什么函数就去写什么函数,这样往往花的时间多,效率低。
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=30;
vector<int>amount[maxn];
int n;
void find(int wood,int &a,int &h)
{
for(a=0;a<n;a++)
for(h=0;h<amount[a].size();h++)
if(amount[a][h]==wood)return;
}
void recover(int b,int h)
{
int box;
for(int i=h+1;i<amount[b].size();i++)
{
box=amount[b][i];
amount[box].push_back(box);
}
amount[b].resize(h+1);
}
void print()
{
for(int i=0;i<n;i++)
{
cout<<i<<":";
for(int j=0;j<amount[i].size();j++)
{
cout<<' '<<amount[i][j];
}
cout<<"\n";
}
}
void move(int b1,int b2,int h1)
{
for(int i=h1;i<amount[b1].size();i++)
{
amount[b2].push_back(amount[b1][i]);
}
amount[b1].resize(h1);
}
int main()
{
int w1,w2,b1,b2,h1,h2;
string s1,s2;
//freopen("input.txt","r",stdin);//不删了我就等死吧!!!
for(int i=0;i<maxn;i++)
{
amount[i].push_back(i);
}
cin>>n;
while(cin>>s1>>w1>>s2>>w2)
{
//if(s1=="quit")break; //这个可以不写 quit代表流结束了 自然while循环就终止了
find(w1,b1,h1);
find(w2,b2,h2);
if(b1==b2)continue;
if(s1=="move")recover(b1,h1);
if(s2=="onto")recover(b2,h2);
move(b1,b2,h1);
}
print();
return 0;
}