这道题刚开始以为要用栈,之后发现其实用递归的思想也是可以模拟出来。
思路:对每一辆车来说进去之后无非是出去或者再等等。这里我就用递归当中的act来代表这辆车的想法。把每一种情况都暴力模拟出来。
直接在代码当中解释吧。
#include <iostream> using namespace std; int num=0; // 可行情况的数目 void vis(bool act,int n,int k){ //act:true为进去,false为出来 n代表当前已经经历过进栈的车的数量 k代表经历过出栈车的数量 if(n>16) return ; //进栈不可以超过16 if(k==16) { //出栈了16次代表其中的一种情况 num++; return ; } vis(true,n+1,k); //这里代表再进一辆 if(k<n) vis(false,n,k+1); //这里代表再出一辆 k<n是因为不能出大于进 return ; } int main(){ vis(true,1,0); //当然是从第一辆进来开始啦 cout<<num<<endl; }