#include?<string>
using?namespace?std;
int?n,m;//由題,n為級數,m為步數
long?long?cnt=0;//統計情況總數
void?dfs(int?step_climb,string?ans,int?left)//step_climb為已經走了幾步
{//ans為最後輸出的字符串答案,left為剩余的臺階級數
if(step_climb>m||left<0)//如果走了不止m步或者走過頭(臺階剩余為負)
{
return?;
}
if(step_climb==m&&left==0)//如果正好走m步並且沒有臺階剩余
{
ans.erase(ans.begin());//刪去多余的-連接號
cout<<ans<<endl;//輸出答案
cnt++;//計數器+1
return;
}
dfs(step_climb+1,ans+"-1",left-1);//向三種情況遞歸搜索,ans添加當前這壹步的級數
dfs(step_climb+1,ans+"-2",left-2);
dfs(step_climb+1,ans+"-3",left-3);
}
int?main()
{
cin>>n>>m;
dfs(0,"",n);
cout<<"壹***有"<<cnt<<"種情況"<<endl;?
}
若有疑問歡迎回復