编程之美的算法思想很好,可是有些地方很难一下子看明白,对于我这种急性子的人,很难一下搞懂。
通俗的将这道题的思路是这样子的
加入烙饼序列 为 1 7 3 5 6 2 4
我们认为 4 为饼子的顶端,由于只能把下面的多块饼移到上面,然后再反转移到响应的位置。
实际上 就是从 底层开始 我们找未放在原位的饼子 ,现在在的位置,将其移到上面,然后在移到响应的位置。
简单地说 就是把大的放到底下,小的放到上面。
这样就容易。
直接code
#include "iostream"
#include "vector"
#include "deque"
using namespace std;
void reverse(vector<int> &cookie,deque<int> &tempStore,int pos)
{
int i;
int data;
tempStore.clear();
for(i=cookie.size()-1;i>=pos;i--)
{
data=cookie[i];
cookie.pop_back();
tempStore.push_back(data);
}
int k=tempStore.size();
for(i=0;i<k;i++)
{
data = tempStore.front();
tempStore.pop_front();
cookie.push_back(data);
}
}
int main()
{
int number = 7;
int i;
int data;
int j;
int max=0,pos;
vector<int> laobin;
deque<int> tempStore;
for(i=0;i<number;i++)
{
scanf("%d",&data);
laobin.push_back(data);
}
int k=laobin.size();
for(i=0;i<k;i++)
{
max=0;
pos=0;
for(j=i;j<k;j++)
{
if(laobin[j]>max)
{
max =laobin[j];
pos=j;
}
}
/*大的不在该在的位置*/
if(pos!=i)
{
if(pos != laobin.size()-1)
reverse(laobin,tempStore,pos);
reverse(laobin,tempStore,i);
}
}
for(vector<int>::iterator iter=laobin.begin();iter!=laobin.end();iter++)
{
cout<<*iter<<' ';
}
cout<<endl;
}
stl
的queue stack deque map multimap set multiset 使用的不是很好。
耽误了时间。