我在做这道题的时候首先用的是回溯法,但是交上地 时候显示超时,下面我把用回溯法的代码贴出来。
#include <stdio.h> #include <math.h> int n,flag=0; int b[100],a[100]; int main() { void f(int x); int i,j,m,t; scanf("%d",&n)!=EOF flag=0; for(i=1;i<=n;i++) { a[i]=1; } b[1]=1; if(n>=2) { f(2); }else { flag=1; } printf("%d ",flag); return 0; } void f(int x) { int i,j; for(i=2;i<=n;i++) { if(a[i]==1&&abs(b[x-1]-i)<=2) { b[x]=i; a[i]=0; if(x<n) { f(x+1); }else { flag+=1; } a[i]=1; } } }
![]()
代码:
#include <stdio.h> int main() { int i,j,n,m,s,t; int a[100]; a[1]=1;a[2]=1;a[3]=2; scanf("%d",&n); for(i=4;i<=n;i++) { a[i]=a[i-1]+a[i-3]+1; } printf("%d\n",a[n]); return 0; }