#include <stdio.h>
#define MAXSIZE 200
int Stack[MAXSIZE];
int Step[] = {1,2,3};
void UpStairs(int TotalSteps,int Step[],int size);
int main()
{
UpStairs(10,Step,sizeof(Step)/sizeof(Step[0]));
return 0;
}
void UpStairs(int TotalSteps,int Step[],int size)
{
int i;
int begin;
int top;
int curSteps = 0;
top = 0;
begin = 0;
do
{
for (i=begin;i<size;++i)
{
if ((curSteps+Step[i])<TotalSteps)
{
curSteps+=Step[i];
Stack[top++] = i;
begin = 0;
break;
}
else if ((curSteps+Step[i])==TotalSteps)
{
curSteps+=Step[i];
Stack[top++] = i;
for (int j = 0;j<top;++j)
{
printf("%d ",Step[Stack[j]]);
}
printf("\n");
i = size;
break;
}
}
if (i==size)
{
--top;
if (top==-1)
{
break;
}
begin = Stack[top];
curSteps -= Step[begin];
begin++;
}
} while (top!=-1);
}
人人笔试1:一个人上台阶可以一次上1个,2个,或者3个,问这个人上n层的台阶,总共有几种走法?
最新推荐文章于 2019-05-14 17:52:46 发布