暴力枚举,解决N层输出台阶走的方法,一一判断
#include<bits/stdc++.h>
using namespace std;
int a[55]={0};
int t=0;
int main(){
//台阶问题
//走的方法
int n;//台阶为4时,4层循环,n是多少循环就多少层
cin>>n;
for(int i=1;i<=3;i++){ //四个循环格式差不多
a[t]=i;//记录i的值
t++;
if(n-i==0){//判断
for(int u=0;u<t;u++){
cout<<a[u]<<" ";
}
cout<<endl;
t--;//每次循环break先t-- ,不然循环结束后面运行不到t--,t的值没法恢复
break;
}
if(n-i<0){
t--;//同上
break;
}
for(int j=1;j<=3;j++){
a[t]=j;
t++;
if(n-i-j==0){
for(int u=0;u<t;u++){
cout<<a[u]<<" ";
}
cout<<endl;
t--;
break;
}
if(n-i-j<0){
t--;
break;
}
for(int k=1;k<=3;k++){
a[t]=k;
t++;
if(n-i-j-k==0){
for(int u=0;u<t;u++){
cout<<a[u]<<" ";
}
cout<<endl;
t--;
break;
}
if(n-i-j-k<0){
t--;
break;
}
for(int q=1;q<=3;q++){
a[t]=q;
t++;
if(n-i-j-k-q==0){
for(int u=0;u<t;u++){
cout<<a[u]<<" ";
}
cout<<endl;
t--;
break;
}
if(n-i-j-k-q<0){
t--;
break;
}
t--;//都不运行前面if的情况,t得恢复(t--) ,下面每个循环也是
}
t--;
}
t--;
}
t--;
}
return 0;
}
下面使用递归方法解决N层输出台阶走的方法
#include<bits/stdc++.h>
using namespace std;
int a[55]={0},t=0;
void dfs(int n){
if(n<0) return;//边界条件 ,n<0retur
if(n==0){//相当于for里面判断0的情况;
for(int i=0;i<t;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return ;
}
for(int i=1;i<=3;i++){
a[t]=i;
t++;
dfs(n-i);
t--;//相当于for循环后面每一个t--
}
}
int main(){
int n;
cin>>n;
dfs(n);
return 0;
}