C++请哪位大神解释下下面这个函数是怎么运行的?程序在补充 140
#include<iostream>#include<stack>#include<vector>usingnamespacestd;intnumber=0;voidfu...
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int number=0;
void func(vector<char>kind,int count[],int n,char A[])
{
if(count[0]>=1)
{
kind.push_back(1);
count[0]--;
func(kind,count,n,A);
count[0]++;
kind.pop_back();
}
if((count[1]>=1) && (count[1]>count[0]))
{
kind.push_back(0);
count[1]--;
func(kind,count,n,A);
count[1]++;
kind.pop_back();
}
if(kind.size()==2*n)
{
vector<char>::iterator iter;
stack<char>stk;
int j=0;
for(iter=kind.begin();iter!=kind.end();iter++)
{
//cout<<(*iter)<<" ";
if(1==(*iter))
{
stk.push(A[j]);
j++;
}
else
{
cout<<stk.top()<<" ";
stk.pop();
}
}
number++;
cout<<endl;
}
}
int main()
{
int n,i;
cout << "please input the number:" << endl;
cin>>n;
char *A=new char[n];
cout << "please input the push sequence:" << endl;
for(i=0;i<n;i++)
{
cin>>A[i];
}
int count[2]={n-1,n};
vector<char>kind;
kind.push_back(1);
cout<<"the result is:"<<endl;
func(kind,count,n,A);
cout<<"total:"<<number<<endl;
return 0;
}
//当输入N=3 ,输入A,B,C时候 详细解释下func函数是怎么运作的?
利用vector容器编写出栈次序的各种情况。和卡特兰数有关。问题转换为:设有N个元素顺序进栈,那么出栈顺序可能有多少种?写出每种次序。已经提高悬赏。
用断点和单步调试来着。不会看啊 展开
#include <stack>
#include <vector>
using namespace std;
int number=0;
void func(vector<char>kind,int count[],int n,char A[])
{
if(count[0]>=1)
{
kind.push_back(1);
count[0]--;
func(kind,count,n,A);
count[0]++;
kind.pop_back();
}
if((count[1]>=1) && (count[1]>count[0]))
{
kind.push_back(0);
count[1]--;
func(kind,count,n,A);
count[1]++;
kind.pop_back();
}
if(kind.size()==2*n)
{
vector<char>::iterator iter;
stack<char>stk;
int j=0;
for(iter=kind.begin();iter!=kind.end();iter++)
{
//cout<<(*iter)<<" ";
if(1==(*iter))
{
stk.push(A[j]);
j++;
}
else
{
cout<<stk.top()<<" ";
stk.pop();
}
}
number++;
cout<<endl;
}
}
int main()
{
int n,i;
cout << "please input the number:" << endl;
cin>>n;
char *A=new char[n];
cout << "please input the push sequence:" << endl;
for(i=0;i<n;i++)
{
cin>>A[i];
}
int count[2]={n-1,n};
vector<char>kind;
kind.push_back(1);
cout<<"the result is:"<<endl;
func(kind,count,n,A);
cout<<"total:"<<number<<endl;
return 0;
}
//当输入N=3 ,输入A,B,C时候 详细解释下func函数是怎么运作的?
利用vector容器编写出栈次序的各种情况。和卡特兰数有关。问题转换为:设有N个元素顺序进栈,那么出栈顺序可能有多少种?写出每种次序。已经提高悬赏。
用断点和单步调试来着。不会看啊 展开
4个回答
展开全部
void func(vector<char>kind,int count[],int n,char A[])中的A是用户输入的数据,n是数据的数目,kind用来保存输出样式(0表示弹出,1表示压入),count用来限定kind中的输出样式合法(表示了kind中可以压入的0的数量和可以压入的1的数量,避免堆栈空栈弹出)。
func中的前两个if用来构造这样的kind,第三个if就是判断当kind构造完成了,就根据kind来入站出站就可以了。
func中的前两个if用来构造这样的kind,第三个if就是判断当kind构造完成了,就根据kind来入站出站就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
画流程图,打草稿,其他没什么特别技巧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不是三言二语能说的清啊,就跟绕口令是的。你还要拿个笔在纸上记着才容易理解。
追问
所以悬赏80分啊 三言两语能说清楚的就没悬赏分了 呵呵
追答
我说你这样直接说真的是很难讲清楚。你也知道,程序这种东西理起来特绕。你这个还是嵌套的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询