69,371
社区成员
发帖
与我相关
我的任务
分享
# include <stdio.h>
int n = 0;
int fun(int r, int s)
{
if(r < 0) {
return 0;
}
if(r == 0 && s % 2 == 0) {
n++;
return 0;
}
for(int i = 1; i <= 2; i++) {
fun(r - i, s + 1);
}
}
int main(void)
{
fun(39, 0);
printf("%d\n", n);
return 0;
}
#include <stdio.h>
static int trace[40];
static int count=0;
void go(int, int, int);
int main()
{
go(39, 0, 1);
go(39, 0, 2);
printf("count=%d\n",count);
}
//
// left: left steps
// mt: mount_times
// step: steps of current movement
//
void go(int left, int mt, int step)
{
int i;
if(left < 0)return;
if(left == 0){
if(!(mt%2)&&(step==1)){
//下面注释掉的代码用来记录小明的脚步,当然题目里并不要求我们记下来。
/*
for(i=0;i<mt;i++){
printf("%3d",trace[i]);
}
printf("\n");
for(i=mt;i<sizeof(trace);i++){
trace[i]=0;
}
*/
count++;
}
return;
}
trace[mt] = step;
left -= step;
mt++;
go(left, mt, 1);
go(left, mt, 2);
}
int aux(int steps, int cnt)
{
if (steps <= 0)
{
if (0 == steps && (cnt && !(cnt % 2)))
return 1;
return 0;
}
return aux(steps - 1, cnt + 1) + aux(steps - 2, cnt + 1);
}
inline int func(steps)
{
return aux(steps, 0);
}